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 になると予想していますが、3 倍の 126 になります。

編集:私の期待は間違っています。クエリは正しい合計を返します。

4

2 に答える 2

2

BSR に BLI.BLID に一致する 3 つのレコードが含まれているか、ShortEmployees に BLI.EmpID の 3 つのレコードが含まれています。

また、なぜ日付を varchar に変換するのですか? そもそもそれらはすべて日付のようです。ハードコードされた日付を「2012 年 1 月 10 日」から ANSI 標準の「2012-10-01」に置き換えます。

于 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 に答える