元のテーブルは次のとおりです。 lClass calldate callcount
1 2005-8-8 40
1 2005-8-7 6
2 2005-8-8 77
3 2005-8-9 33
3
-8-8 9
3 2005-8-7 21
Classの値に従って、CallCount1、CallCount2、CallCount3を日付ごとにカウントします。
この日付のレコードがない場合、値は0です
次の形式にマージする必要があります:
CallDate CallCount1 CallCount2 CallCount3
2005-8-9 0 0 33
2005-8-8 40 77 9
2005- 8 -7 6 0 21
--テスト環境を作成
テーブルT(Class varchar(2),CallDate datetime, CallCount int)を作成
T select '1','2005-8-8',40
unionに挿入すべて選択 '1'、'2005 -8-7'、6
結合 すべて選択 '2'、'2005-8-8'、77
結合 すべて選択 '3'、'2005-8-9'、33
Union all select '3',' 2005-8-8',9
union all select '3','2005-8-7',21
--動的 SQL
declare @s varchar(8000)
set @s ='select CallDate '
select @ s=@s ',[CallCount' Class ']=sum(case when Class=''' Class ''' then CallCount else 0 end)'
from T
クラスごとにグループ化
set @s=@s ' from T group by CallDate order by CallDate desc '
exec(@s)
--result
CallDate CallCount1 CallCount2 CallCount3
------------------ -------- ---------------------------- ---------- ---- ------ -----------
2005-08-09 00:00:00.000 0 0 33
2005-08-08 00:00:00.000 40 77 9
2005-08- 07 00:00:00.000 6 0 21
--テスト環境を削除
テーブル T を削除