使用join时SQL错误总和

时间:2012-10-22 08:03:02

标签: sql sql-server join sum

我有这个问题:

SELECT     BLI.EmpID, ShortEmployees.EmpName1 AS EmpName, SUM(BLI.FinalValue) AS Total
FROM       BLI 
INNER JOIN BSR ON BLI.BLID = BSR.BLID 
INNER JOIN ShortEmployees ON BLI.EmpID = ShortEmployees.EmpID
WHERE     (CONVERT(varchar, BLI.BLDate, 112) >= CONVERT(varchar, CONVERT(datetime, '1/10/2012', 103), 112)) 
AND (CONVERT(varchar, BLI.BLDate, 112)  <= CONVERT(varchar, CONVERT(datetime, '30/10/2012', 103), 112)) 
AND (BSR.BSTID = 2) 
AND (BLI.State IN (2, 6, 8, 9, 10, 12, 18))
GROUP BY BLI.EmpID, ShortEmployees.EmpName1
ORDER BY Total DESC

我期待总数为42,但我得到它的三倍126!

编辑: 我的期望是错误的,查询返回正确的总和。

2 个答案:

答案 0 :(得分:2)

BSR包含三个与BLI.BLID匹配的记录,或者ShortEmployees包含三个BLI.EmpID记录。

另外,为什么要将日期转换为varchar?看起来他们首先是所有日期。将您的硬编码日期从'1/10/2012'替换为'2012-10-01'的ansi标准

答案 1 :(得分:0)

关于日期格式。对于SQL Server,请使用此日期格式“YYYYMMDD”。 SQL Server知道如何将此日期与表中的日期列进行比较。

所以, 正确的SQL代码可以是:

WHERE BLI.BLDate >= '20121001' AND BLI.BLDate <= '20121030'

WHERE BLI.BLDate BETWEEN '20121001' AND '20121030'