2017-09-04 8 views
1

は私が持っている(表さ日のすべての24時間を取得)以下のクエリ私は時間あたりの通話のこのチャートを生成するために使用group by句に、空のグループの追加

SELECT 

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

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

From [table] 

group by datepart(hh,[Start Time]) 

chart

1時間ごとにデータが入っているわけではないので、SSMSにはこれらの時間が表示されません。 [Calls Answered]フィールドに0に含まれる欠落時間を取得するSQLの簡単な方法はありますか?私はSQLサーバー2016上にあります。

+2

アウタージョイントは1から24までの値を格納するテンポラリテーブルと結合します。 – jarlh

答えて

2

あなたは24時間生成する再帰CTE(またはその他の方法)を使用することができます。

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を確保(おそらく)に1つの方法です。 elseを既にお持ちの場合は、テーブルに一致する時間がないことがありますので、注意が必要です。

+0

何らかの理由で私はこれを動作させることができません。https://imgur.com/daFkLcc誰かが私がこの画像から間違っているのを見ることができますか? – tomdemaine

+0

@tomdemaine。 。 。 2番目のテーブルの 'WHERE'節の条件は' ON'節になければなりません。 –

+0

これはうまくいった。ありがとう。 – tomdemaine

関連する問題