2014-11-06 87 views
-1

进出口新为sql目前使用一本书来学习它,我有表SQL查询总结列

CREATE TABLE MOV (
    codigo NUMBER(5), 
    tipo char(1), 
    monto NUMBER(7, 2)); 

INSERT INTO MOV VALUES (1,'I',5000.00); 
INSERT INTO MOV VALUES (2,'I',6000.00); 
INSERT INTO MOV VALUES (3,'I',7000.00); 
INSERT INTO MOV VALUES (4,'I',8000.00); 
INSERT INTO MOV VALUES (5,'I',9000.00); 
INSERT INTO MOV VALUES (6,'I',9500.00); 
INSERT INTO MOV VALUES (7,'I',8500.00); 
INSERT INTO MOV VALUES (8,'I',7500.00); 
INSERT INTO MOV VALUES (9,'I',6500.00); 
INSERT INTO MOV VALUES (10,'I',5500.00); 
INSERT INTO MOV VALUES (1,'I',5650.00); 
INSERT INTO MOV VALUES (2,'I',6650.00); 
INSERT INTO MOV VALUES (3,'I',7650.00); 
INSERT INTO MOV VALUES (4,'I',8650.00); 
INSERT INTO MOV VALUES (5,'I',9650.00); 
INSERT INTO MOV VALUES (6,'I',10150.00); 
INSERT INTO MOV VALUES (7,'I',9150.00); 
INSERT INTO MOV VALUES (8,'I',8150.00); 
INSERT INTO MOV VALUES (9,'I',7150.00); 
INSERT INTO MOV VALUES (10,'I',6150.00); 
INSERT INTO MOV VALUES (1,'I',6300.00); 
INSERT INTO MOV VALUES (2,'I',7300.00); 
INSERT INTO MOV VALUES (3,'I',8300.00); 
INSERT INTO MOV VALUES (4,'I',9300.00); 
INSERT INTO MOV VALUES (5,'I',10300.00); 
INSERT INTO MOV VALUES (6,'I',10800.00); 
INSERT INTO MOV VALUES (7,'I',9800.00); 
INSERT INTO MOV VALUES (8,'I',8800.00); 
INSERT INTO MOV VALUES (9,'I',7800.00); 
INSERT INTO MOV VALUES (10,'I',6800.00); 
INSERT INTO MOV VALUES (1,'I',6950.00); 
INSERT INTO MOV VALUES (2,'I',7950.00); 
INSERT INTO MOV VALUES (3,'I',8950.00); 
INSERT INTO MOV VALUES (4,'I',9950.00); 
INSERT INTO MOV VALUES (5,'I',10950.00); 
INSERT INTO MOV VALUES (6,'I',11450.00); 
INSERT INTO MOV VALUES (7,'I',10450.00); 
INSERT INTO MOV VALUES (8,'I',9450.00); 
INSERT INTO MOV VALUES (9,'I',8450.00); 
INSERT INTO MOV VALUES (10,'I',7450.00); 
INSERT INTO MOV VALUES (1,'I',7600.00); 
INSERT INTO MOV VALUES (2,'I',8600.00); 
INSERT INTO MOV VALUES (3,'I',9600.00); 
INSERT INTO MOV VALUES (4,'I',10600.00); 
INSERT INTO MOV VALUES (5,'I',11600.00); 
INSERT INTO MOV VALUES (6,'I',12100.00); 
INSERT INTO MOV VALUES (7,'I',11100.00); 
INSERT INTO MOV VALUES (8,'I',10100.00); 
INSERT INTO MOV VALUES (9,'I',9100.00); 
INSERT INTO MOV VALUES (10,'I',8100.00); 
INSERT INTO MOV VALUES (1,'D',3800.00); 
INSERT INTO MOV VALUES (2,'D',4300.00); 
INSERT INTO MOV VALUES (3,'D',4800.00); 
INSERT INTO MOV VALUES (4,'D',5300.00); 
INSERT INTO MOV VALUES (5,'D',5800.00); 
INSERT INTO MOV VALUES (6,'D',6050.00); 
INSERT INTO MOV VALUES (7,'D',5550.00); 
INSERT INTO MOV VALUES (8,'D',5050.00); 
INSERT INTO MOV VALUES (9,'D',4550.00); 
INSERT INTO MOV VALUES (10,'D',4050.00); 
INSERT INTO MOV VALUES (1,'D',1900.00); 
INSERT INTO MOV VALUES (2,'D',2150.00); 
INSERT INTO MOV VALUES (3,'D',2400.00); 
INSERT INTO MOV VALUES (4,'D',2650.00); 
INSERT INTO MOV VALUES (5,'D',2900.00); 
INSERT INTO MOV VALUES (6,'D',3025.00); 
INSERT INTO MOV VALUES (7,'D',2775.00); 
INSERT INTO MOV VALUES (8,'D',2525.00); 
INSERT INTO MOV VALUES (9,'D',2275.00); 
INSERT INTO MOV VALUES (10,'D',2025.00); 
INSERT INTO MOV VALUES (1,'D',950.00); 
INSERT INTO MOV VALUES (2,'D',1075.00); 
INSERT INTO MOV VALUES (3,'D',1200.00); 
INSERT INTO MOV VALUES (4,'D',1325.00); 
INSERT INTO MOV VALUES (5,'D',1450.00); 
INSERT INTO MOV VALUES (6,'D',1512.50); 
INSERT INTO MOV VALUES (7,'D',1387.50); 
INSERT INTO MOV VALUES (8,'D',1262.50); 
INSERT INTO MOV VALUES (9,'D',1137.50); 
INSERT INTO MOV VALUES (10,'D',1012.50); 
INSERT INTO MOV VALUES (1,'I',2600.00); 
INSERT INTO MOV VALUES (2,'I',2725.00); 
INSERT INTO MOV VALUES (3,'I',2850.00); 
INSERT INTO MOV VALUES (4,'I',2975.00); 
INSERT INTO MOV VALUES (5,'I',3100.00); 
INSERT INTO MOV VALUES (6,'I',3162.50); 
INSERT INTO MOV VALUES (7,'I',3037.50); 
INSERT INTO MOV VALUES (8,'I',2912.50); 
INSERT INTO MOV VALUES (9,'I',2787.50); 
INSERT INTO MOV VALUES (10,'I',2662.50); 
INSERT INTO MOV VALUES (1,'D',650.00); 
INSERT INTO MOV VALUES (2,'D',681.25); 
INSERT INTO MOV VALUES (3,'D',712.50); 
INSERT INTO MOV VALUES (4,'D',743.75); 
INSERT INTO MOV VALUES (5,'D',775.00); 
INSERT INTO MOV VALUES (6,'D',790.63); 
INSERT INTO MOV VALUES (7,'D',759.38); 
INSERT INTO MOV VALUES (8,'D',728.13); 
INSERT INTO MOV VALUES (9,'D',696.88); 
INSERT INTO MOV VALUES (10,'D',475.25); 


CREATE TABLE EMPLE (
    codigo NUMBER(5), 
    nombre char(40)); 

INSERT INTO EMPLE VALUES (1,'PEDRO PEREZ MORA'); 
INSERT INTO EMPLE VALUES (2,'MARIA BRENES ORTIZ'); 
INSERT INTO EMPLE VALUES (3,'CARLOS QUESADA BONILLA'); 
INSERT INTO EMPLE VALUES (4,'LUISA SOTO ABARCA'); 
INSERT INTO EMPLE VALUES (5,'OLMAN BADILLA CORTES'); 
INSERT INTO EMPLE VALUES (6,'ANA CAMACHO DIAZ'); 
INSERT INTO EMPLE VALUES (7,'ALVARO DUARTE ESPINOZA'); 
INSERT INTO EMPLE VALUES (8,'HAZEL ELIZONDO GAMBOA'); 
INSERT INTO EMPLE VALUES (9,'HUGO GARITA JIMENEZ'); 
INSERT INTO EMPLE VALUES (10,'LIDIETH JARA ECHANDI'); 
INSERT INTO EMPLE VALUES (11,'JOSE MORA QUIROS'); 
INSERT INTO EMPLE VALUES (12,'ROY PAZOS RODRIGUEZ'); 

最终的结果应该是这样的:

enter image description here

我有什么一个简单的选择语句

select e.codigo, e.nombre 
from mov e; 

我怎样才能使查询结果为打算在图像 谢谢

+0

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html – 2014-11-06 15:49:06

+1

您似乎没有唯一标识行的机制。所以你很困难。 – Strawberry 2014-11-06 17:38:19

+0

@Strawberry已经死了。你将如何识别这些记录?您的MOV表格没有主键,因此无法通过NOMBRE识别,汇总和分组。 – mmmmmpie 2014-11-06 17:52:06

回答

1

一个简单的LEFT JOIN与GROUP BY应该这样做;

SELECT e.codigo, e.nombre, 
    SUM(CASE WHEN m.tipo = 'I' THEN m.monto ELSE 0 END) ingresos, 
    SUM(CASE WHEN m.tipo = 'D' THEN m.monto ELSE 0 END) deducciones, 
    SUM(CASE WHEN m.tipo = 'I' THEN m.monto ELSE 0 END) - 
    SUM(CASE WHEN m.tipo = 'D' THEN m.monto ELSE 0 END) neto 
FROM emple e 
LEFT JOIN mov m 
    ON e.codigo = m.codigo 
GROUP BY e.codigo, e.nombre 
ORDER BY e.codigo, e.nombre 

的LEFT JOIN让我们收集了所有相应的“MOV” S每个“emple”,以及GROUP BY让我们来总结他们为每个codigo /农布雷组合。

An SQLfiddle to test with

+0

哥们很多谢谢你点亮我的方式,爱学习sql – user3458416 2014-11-07 03:24:03

0

如果我理解你需要加入这两个表。

喜欢的东西...

Select e.*,m.* from emple e,mov m where e.codigo = m.codigo; 
+0

但我怎么能总结价值按照代码 – user3458416 2014-11-06 16:10:13

+0

@ user3458416,你不能。 – mmmmmpie 2014-11-06 18:13:44