17.10 - 例: PIVOTのソースとしてTD_UNPIVOTまたはUNPIVOTの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)
Last Update
2021-09-23

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