2013-04-09 88 views
0

我有两个表相似,这些:SQL SUM错误(总和及乘)

TABLE1 
PC Date  Num Name ID 
8901 01/03/2013 5099 AAA 11 
8901 01/03/2013 5099 AAA 11 
8901 01/03/2013 5099 AAA 11 
8901 02/03/2013 5099 AAA 12 
8902 03/03/2013 5099 AAA 13 
8903 04/03/2013 5099 AAA 14 

TABLE2 
PC Date  Num Name ID Bar2 
8901 01/03/2013 5099 AAA 11 3 
8901 01/03/2013 5099 AAA 11 2 
8901 01/03/2013 5099 AAA 11 9 
8901 02/03/2013 5099 AAA 12 3 
8902 03/03/2013 5099 AAA 13 4 
8903 04/03/2013 5099 AAA 14 5 

而这个查询:

SELECT TABLE1.PC, TABLE1.Date, TABLE1.Num, TABLE1.Name, COUNT(*), SUM(TABLE2.Bar2)   
FROM TABLE1, TABLE2 
WHERE TABLE1.ID = TABLE2.ID   
GROUP BY TABLE1.PC, TABLE1.Date, TABLE1.Num, TABLE1.Name   
ORDER BY TABLE1.PC, TABLE1.Date 

结果是:

PC  Date   Num  Name COUNT SUM 
8901 01/03/2013 0:00 5099 AAA 9  42 
8901 02/03/2013 0:00 5099 AAA 1  3 
8902 03/03/2013 0:00 5099 AAA 1  4 
8903 04/03/2013 0:00 5099 AAA 1  5 

因此,它总和,然后它乘以条目的nº((3 + 2 + 9)* 3 = 42)。

我在做什么错? 谢谢!!

+0

为什么你需要加入这些表一起?看起来,您正在进行的求和的列仅在TABLE2中列PC,日期,数字,名称和ID合在一起时是一个UNIQUE键。我假设你在“TABLE2”中有你想要显示的其他信息?如果上面提到的五列是一个UNIQUE键,那么可以在WHERE子句中添加所有这些以消除看起来是您的问题的重复项。 – 2013-04-09 15:02:47

回答

0

这是不完全清楚自己想要的期望的结果是什么,但你可以使用子查询来获得总和:

SELECT t1.PC, 
    t1.Date, 
    t1.Num, 
    t1.Name, 
    COUNT(*), 
    t2.Total 
FROM TABLE1 t1 
INNER JOIN 
(
    SELECT SUM(Bar2) Total, ID 
    FROM TABLE2 
    GROUP BY ID 
) t2 
    ON t1.ID = t2.ID 
GROUP BY t1.PC, t1.Date, t1.Num, t1.Name, t2.Total 
ORDER BY t1.PC, t1.Date 

SQL Fiddle with Demo

+0

我不知道如何把它放在MS Query中。我想在第一个例子(ID = 11)中得到的结果是COUNT = 9而不是3,SUM = 14而不是42。 – caviezel 2013-04-09 15:52:20