PIVOTは、PIVOT演算子のソースとして、UNPIVOTクエリーまたはTD_UNPIVOT関数をサポートしています。
PIVOT/UNPIVOTは、列データのいくつかの集約に基づいて、行から列へ、列から行へ、データを変換するために一次元方式を使用します。
PIVOTでUNPIVOTクエリーをソースとして指定して、1つのクエリー内の行と列をスワップします。これにより、列のいくつかの集約に基づいて、テーブル内のデータを柔軟に2次元交換できます。
2次元的にデータを変換するには、列のデータを収集して、行と列に2度変換します。この場合、列データのいくつかの集約に基づいて行および列をスワップします。テーブルはいくつかの集約を使用して2度回転しますが、実際のテーブル行を返さない場合があります。データが欠落している場合は新しい行が作成され、プロセス内でデータが集約された場合は行が削除されます。
2次元では、UNPIVOTクエリーでPIVOTをソースとして使用したり、PIVOTクエリーでUNPIVOTをソースとして使用したりします。UNPIVOTクエリーでPIVOTをソースとして使用すると、SQLの作成が複雑になります。PIVOTクエリーでUNPIVOTをソースとして使用するほうが簡単です。
最初に、次のデータを使用してテーブルを作成します。
CREATE TABLE t1 (place CHAR(5), sales1 INTEGER, sales2 INTEGER, sales3 INTEGER, sales4 INTEGER, sales5 INTEGER) PRIMARY INDEX ( place ); place sales1 sales2 sales3 sales4 sales5 ----- --------- -------- -------- -------- -------- Hyd 110 100 1000 1100 500 Che 120 200 2000 1200 600 Kol 150 500 5000 1500 900 Mee 140 400 4000 1400 800 Pun 130 300 3000 1300 700
各場所の売上の合計を取得するには、次のクエリーを使用して売上および場所をスワップします。
SELECT * from (SELECT * from t1 UNPIVOT(saleval for sales in (sales1, sales2, sales3, sales4, sales5))dt1)dt2 PIVOT(SUM(saleval) for place in ('hyd','Che','pun', 'mee','kol'))dt3;ソースとしてUNPIVOTを使用した場合の結果:
sales Hyd Che Pun Mee Kol ----- -------- -------- -------- -------- -------- sales1 110 120 130 140 150 sales2 100 200 300 400 500 sales3 1000 2000 3000 4000 5000 sales4 1100 1200 1300 1400 1500 sales5 500 600 700 800 900