我有以下查询
SELECT
datepart(hh,[Start Time]) as [Hour]
,SUM(
CASE ...
END) as [Calls Answered]
From [table]
group by datepart(hh,[Start Time])
我用它来生成每小时的呼叫图表
正如您所看到的那样,当天不是每个小时都有数据,所以SSMS没有显示这些时间。 SQL中是否有一种简单的方法可以为[Calls Answered]字段获取0的丢失小时数?我在SQL server 2016 fwiw上。
答案 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
,则需要小心,因为您的表格中可能没有任何匹配。