我有这个问题:
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!
编辑: 我的期望是错误的,查询返回正确的总和。
答案 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'