我有以下SQL查询开始:
SELECT CASE
WHEN CAST(tDate as DATE) < CAST(GETDATE() as date) -- if older then Today
THEN DATEADD(dd,-1,CAST(GETDATE() as date)) -- assgin yesterday's date
ELSE CAST(tDate as date) -- use the date
END as tDate,
SUM(tDuration-ISNULL(tDone,0)) as tToDo FROM tTable
WHERE .....conditions.....
GROUP BY tDate
ORDER BY tDate
我有两个问题:
我尝试SUM()
所有过去任务的持续时间到昨天的日期,我成功了,但GROUP BY
并不会将它们合并为一个日期,而是将它们保留在分开的线条。我不知道为什么,当我将日期时间输入转换为日期时,它们应具有相同的值。
我尝试使用CONVERT
代替CAST
,并将CASE
处理分为子查询而没有任何改进。
答案 0 :(得分:1)
用以下内容替换您的查询:
SELECT CASE
WHEN CAST(tDate as DATE) < CAST(GETDATE() as date) -- if older then Today
THEN DATEADD(dd,-1,CAST(GETDATE() as date)) -- assgin yesterday's date
ELSE CAST(tDate as date) -- use the date
END as tDate,
SUM(tDuration-ISNULL(tDone,0)) as tToDo FROM tTable
WHERE .....conditions.....
GROUP BY CASE
WHEN CAST(tDate as DATE) < CAST(GETDATE() as date) -- if older then Today
THEN DATEADD(dd,-1,CAST(GETDATE() as date)) -- assgin yesterday's date
ELSE CAST(tDate as date) -- use the date
END
ORDER BY tDate