例: 1つにピボット解除された12列 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL演算子およびユーザー定義関数

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/fsi1592016213432.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1210
Product Category
Software
Teradata Vantage

次の例では、(COLUMN_LISTに示す)12個の列を12行からなる1列にピボット解除しています。

query_expressionの入力テーブルT(以下のSELECT文に指定)には、id、year、jan_sales、feb_sales、...、dec_salesなどの列があります。

SELECT * from TD_UNPIVOT(
        ON( select * from T)
        USING
            VALUE_COLUMNS('monthly_sales')
            UNPIVOT_COLUMN('month')
            COLUMN_LIST('jan_sales', 'feb_sales', ..., 'dec_sales')
            COLUMN_ALIAS_LIST('jan', 'feb', ..., 'dec' )
    )X;    

出力列はid、year、month、monthly_salesです。

入力行は、次のようになっています。

     id
      year
    jan_sales
   feb_sales
   ... dec_sales
     123     2012    100         200         ... 1200

12行の出力が生成されます。

id
  year
    month
   monthly_sales
    
    123 2012    jan     100
    123 2012    feb     200
    ...
    123 2012    dec     1200 

次の例では、値列が2つ以上あり、COLUMN_LISTの書式は'a, x, ..', 'b, y, ..', 'c, z, ...', ...となります。a、x、b、y、c、z...は、値列にピボット解除される列の名前です。

個々のリスト、例えば'a, x, ..',では、1つの出力行の値列にどの列をマップするかを定義します。

入力テーブルTには、id、year、jan_sales、jan_expense、feb_sales、feb_expense、...、dec_sales、dec_expenseなどの列があります。

SELECT * from UNPIVOT(
        ON( select * from T)
        USING
            VALUE_COLUMNS('monthly_sales', 'monthly_expense')
            UNPIVOT_COLUMN('month')
            COLUMN_LIST('jan_sales, jan_expense', 'feb_sales,                feb_expense', ..., 'dec_sales, dec_expense')
            COLUMN_ALIAS_LIST('jan', 'feb', ..., 'dec' )
    )X;

出力列はid、year、month、monthly_sales、monthly_expenseです。

入力行は、次のようになっています。

id   year  jan_sales  jan_exp feb_sales feb_exp...dec_sales dec_exp
123   2012  100        50      200       100  ...  1200      600

12行の出力が生成されます。

id  year    month   monthly_sales   monthly_expense
    123 2012    jan     100             50
    123 2012    feb     200             100
    ...
    123 2012    dec     1200            600