0

我有这个查询:

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 的三倍!

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

4

2 回答 2

2

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

另外,为什么要将日期转换为 varchar?看起来他们一开始都是约会对象。将您的硬编码日期从“2012 年 1 月 10 日”替换为“2012 年 10 月 1 日”的 ansi 标准

于 2012-10-22T08:10:07.073 回答
0

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

因此,正确的 SQL 代码可能如下所示:

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

或者

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

于 2012-10-22T12:43:34.453 回答