HOME >> Tips >> Oracle Tips >> SQL

SELECTの結果を"複数列"行列変換する(PIVOT)

 
文書番号:20255




SELECT した結果一覧を"複数列"行列変換して取得するSQL。

サンプルデータは以下の通りです。
コード 数量 金額
00015 100
000115150
000150250
00021 50
000220300
000320250
000360500
000320160
複数列を行列変換する場合、FOR ~ IN ()の中の指定で AS句による別名をつけるところがポイントです。
返される列名は一定のルールで付けられますので「SELECT * ~」で取得してみるとわかります。

SELECT PVT.A01_数量
      ,PVT.A01_金額
      ,PVT.A02_数量
      ,PVT.A02_金額
      ,PVT.A03_数量
      ,PVT.A03_金額
FROM (
    SELECT コード
          ,SUM(数量) AS 数量
          ,SUM(金額) AS 金額
    FROM   TAB_A
    GROUP BY コード
)
PIVOT (
    SUM(数量) AS 数量
   ,SUM(金額) AS 金額
    FOR コード IN (
        '0001' AS A01
       ,'0002' AS A02
       ,'0003' AS A03
    )
) PVT
結果
A01_数量 A01_金額 A02_数量 A02_金額 A03_数量 A03_金額
70 500 21 350 100 910