【SQLServer】動的なクロス集計(PIVOT)
動的なクロス集計
4日連続で鍋のJimです。どうも✋
ついでに、鍋の翌日は朝食も昼食もおじやです。
はい。ってことで、今回は動的なクロス集計という記事ね。
派遣あるある⇒
あれ?あの時どうやったっけ?って、転職の多くて手元にソースコード残ってねぇっ!
うん、今回は残しておこう。
例えば、、
↓この一覧の『日付』に対して『口にしたもの』が何回かという表を作りたいというとき
って時に、『口にしたもの』にある値を項目名として横に並べないといけない。
それが思い出せなくてさ。2度あることは3度あるでしょ。
ってことで、ソース。。。
--クロス集計のカラムを取得
DECLARE @COL AS NVARCHAR(MAX)
SELECT @COL = COALESCE(@Col + N',',N'') + N'[' +T.[口にしたもの] + N']'
FROM (
SELECT [口にしたもの]
FROM [dbo].[一覧]
GROUP BY [口にしたもの]
) AS T
ORDER BY T.[口にしたもの]
--取得したカラムでクロス集計のSQL生成
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = N'
SELECT
日付
,' + @COL + N'
FROM (SELECT [日付]
,[口にしたもの]
,1 AS 回数
FROM [dbo].[一覧]
) AS T
PIVOT (
SUM(回数)
FOR 口にしたもの IN (' + @Col + N')
) AS P
'
--SQL実行
EXECUTE sp_executesql @SQL
ってことで、久しぶりに仕事のことを書いたね。
旧システムから新システム移行にあたって、データをそのまま「ほ~らよ!」って持っていけないので、新システムに合わせてSQLをひたすら書くて仕事。
テーブルが山ほどあるので大変よ。
ちな、『一覧.csv』の口にしたものは、ガチで口にしたものしか入っていないです。
したら、またね✋
ディスカッション
コメント一覧
まだ、コメントがありません