SQL Group By条件

时间:2016-05-26 16:35:40

标签: sql sql-server group-by

我有以下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处理分为子查询而没有任何改进。

1 个答案:

答案 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