【SQLServer】動的なクロス集計(PIVOT)

動的なクロス集計

4日連続で鍋のJimです。どうも✋

 

ついでに、鍋の翌日は朝食も昼食もおじやです。

はい。ってことで、今回は動的なクロス集計という記事ね。

派遣あるある⇒

あれ?あの時どうやったっけ?って、転職の多くて手元にソースコード残ってねぇっ!

うん、今回は残しておこう。

例えば、、

↓この一覧の『日付』に対して『口にしたもの』が何回かという表を作りたいというとき

csvダウンロード

 

って時に、『口にしたもの』にある値を項目名として横に並べないといけない。

それが思い出せなくてさ。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』の口にしたものは、ガチで口にしたものしか入っていないです。

Twitterフォロー

したら、またね✋