- カテゴリ:
UNPIVOT¶
列を行に変換することにより、テーブルを回転します。UNPIVOT は、列のリストとともに(テーブルまたはサブクエリから)2つの列を受け入れ、リストで指定された各列の行を生成する関係演算子です。クエリでは、テーブル名またはサブクエリの後の FROM 句で指定されます。
PIVOT によって行われた集約を取り消すことができないため、 UNPIVOT は PIVOT の完全に逆ではないことに注意してください。
この演算子を使用して、幅の広いテーブル(例: empid
、 jan_sales
、 feb_sales
、 mar_sales
など)を幅の狭いテーブル(例: empid
、 month
、 sales
)に変換できます。
- こちらもご参照ください。
構文¶
SELECT ...
FROM ...
UNPIVOT ( <value_column>
FOR <name_column> IN ( <column_list> ) )
[ ... ]
value_column
生成列に割り当てる名前。列リスト内の列の値が入力されます。
name_column
生成列に割り当てる名前。列リスト内の列の名前が入力されます。
column_list
単一のピボット列に絞り込まれるソーステーブルまたはサブクエリの列の名前。列名には
name_column
が入力され、列値にはvalue_column
が入力されます。column_list
には、サブクエリではなくリテラル列名のみを含める必要があります。
例¶
次の構造とデータを持つテーブル monthly_sales
を使用して、個々の月列のピボットを解除し、各従業員に対して month
ごとに単一の sales
値を返します。
-- example setup CREATE OR REPLACE TABLE monthly_sales(empid INT, dept TEXT, jan INT, feb INT, mar INT, april INT); INSERT INTO monthly_sales VALUES (1, 'electronics', 100, 200, 300, 100), (2, 'clothes', 100, 300, 150, 200), (3, 'cars', 200, 400, 100, 50); -- UNPIVOT example SELECT * FROM monthly_sales UNPIVOT(sales FOR month IN (jan, feb, mar, april)) ORDER BY empid; +-------+-------------+-------+-------+ | EMPID | DEPT | MONTH | SALES | |-------+-------------+-------+-------| | 1 | electronics | JAN | 100 | | 1 | electronics | FEB | 200 | | 1 | electronics | MAR | 300 | | 1 | electronics | APRIL | 100 | | 2 | clothes | JAN | 100 | | 2 | clothes | FEB | 300 | | 2 | clothes | MAR | 150 | | 2 | clothes | APRIL | 200 | | 3 | cars | JAN | 200 | | 3 | cars | FEB | 400 | | 3 | cars | MAR | 100 | | 3 | cars | APRIL | 50 | +-------+-------------+-------+-------+