ゆるいSEのIT徒然草

SE向けナレッジ(ほぼ自分用メモ)。技術以外にも、システム関連のもろもろ雑多なノウハウを公開します。内容保証しません!!!

縦持ちデータを横持ちに変換(PIVOT)

■PIVOTとは 縦持ちデータを横持ちに変換する。

■例 プラントごとで、雇用者タイプ別(派遣社員、正社員)の社員数を表示する。 雇用者タイプは横持ち変換する。

・EMPデータ PlantCode EmpType Name ... 1000 1 Tanaka 1000 1 Tani 1000 1 Abe 1000 1 Kouno 1000 2 Fukumoto 2000 1 Ishida 2000 1 Kawasaki 2000 1 Terada 2000 2 Kawamoto 2000 2 Fukuda

SQL SELECT --B部 t.PlantCode ,ISNULL(T.[ ],0) AS [blank] ,ISNULL(T.[1],0) AS [正社員] ,ISNULL(T.[2],0) AS [派遣社員] FROM ( SELECT --A部 PlantCode ,EmpType --1:正社員 2:派遣社員 ,count(1) AS CNT FROM EMP GROUP BY PlantCode,EmpType ) a PIVOT(SUM(CNT) FOR EmpType IN ([ ], [0], [1]) ) T ORDER BY PlantCode

・A部出力結果(PIVOT前:普通にプラント・雇用者タイプ別にカウント) PlantCode EmpType CNT 1000 1 4 1000 2 1 2000 1 3 2000 2 2

・B部出力結果(PIVOT後:EmpTypeを横持ちにする) PlantCode 正社員 派遣社員 1000 4 1 2000 3 2