将空组添加到group by子句中(表示一天中的所有24小时)

时间:2017-09-04 14:40:33

标签: sql sql-server group-by

我有以下查询

 SELECT

    datepart(hh,[Start Time]) as [Hour]

    ,SUM(
    CASE ...
    END) as [Calls Answered]

From [table]

group by datepart(hh,[Start Time])

我用它来生成每小时的呼叫图表

chart

正如您所看到的那样,当天不是每个小时都有数据,所以SSMS没有显示这些时间。 SQL中是否有一种简单的方法可以为[Calls Answered]字段获取0的丢失小时数?我在SQL server 2016 fwiw上。

1 个答案:

答案 0 :(得分:2)

您可以使用递归CTE(或其他方法)生成24小时:

with hours as (
      select 0 as h
      union all
      select h + 1
      from hours
      where h + 1 < 24
    )
select hours.h as [Hour],
       sum(case . . . else 0 end) as [Calls Answered]
from hours left join
     [table] t
     on hours.h = datepart(hour, [Start Time])
group by hours.h
order by hours.h;

else 0是(可能)确保sum()返回0而不是NULL的一种方式。如果您已经有else,则需要小心,因为您的表格中可能没有任何匹配。