リファレンスガイド> TDV SQLのキーワードと構文> UNPIVOT
 
UNPIVOT
UNPIVOT演算子は、テーブル式(テーブル、プロシージャ、またはJOIN)を受け取り、列を行にローテーションします。
構文
unpivot_clause : table_reference UNPIVOT ( ( INCLUDE | EXCLUDE ) NULLS )?
LEFT_PAREN ( identifier | LEFT_PAREN identifier ( COMMA identifier )+ RIGHT_PAREN )
unpivot_for_clause
unpivot_in_clause
RIGHT_PAREN (AS)? identifier
 
unpivot_for_clause : FOR identifier
unpivot_in_clause : IN LEFT_PAREN ( column ( AS string_constant )? ( COMMA column ( AS string_constant )? )*
| unpivot_multiple_columns ( COMMA unpivot_multiple_columns )*
)
RIGHT_PAREN
unpivot_multiple_columns : LEFT_PAREN column ( COMMA column )* RIGHT_PAREN
( AS string_constant )?
備考
テーブル式には、テーブル、プロシージャ、またはJOINを指定できます。
テーブル式の結果は、UNPIVOT演算子に入力されます。
投影の例
UNPIVOTオペレーターは、UNPIVOTおよびFORキーワードの直後のIDによって指定された新しいプロジェクションを導入します。
 
UNPIVOT (LabelOldColumnValues .... FOR LabeOldColumnNames
 
LabelOldColumnValuesとLabeOldColumnNamesが2つの新しい列になります。 LabeOldColumnNamesには、ピボットされていない列の名前が含まれます。 LabelOldColumnValuesには、ピボットされていない列の値が含まれます。
 
UNPIVOT (LabelOldColumnValues FOR LabeOldColumnNames IN (columnA, columnB)
列の名前を変更する例
IN句で文字列定数として新しい名前を指定することにより、古い列名の名前を変更できます。
以下の例では、文字列「columnA」と「columnB」の代わりに、文字列「rename1」と「rename2」が表示されます。
 
UNPIVOT ... FOR LabeOldColumnNames IN (columnA as 'rename1', columnB as 'rename2')
O LabeOldColumnNames LabelOldColumnValues
1 rename1 a1
1 rename2 a2
2 rename1 b1
2 rename2b2
3 rename1 c1
3 rename2 c2
複数の列セットの例
UNPIVOT ( (LabelOldColumnValues1, LabelOldColumnValues2, LabelOldColumnValues3) FOR
LabeOldColumnNames IN ( (columnA, columnB, columnC), (columnD, columnE, columnF) )
 
O columnA columnB columnC columnD columnE columnF
1 a1 b1 c1 d1 e1 f1
2 a2 b2 c2 d2 e2 f2
3 b3 c3 d3 e3 f3
 
will be rotated to
O LabeOldColumnNames LabelOldColumnValues1 LabelOldColumnValues2 LabelOldColumnValues3
- ------------ ------ ------
1 columnA_columnB_columnC a1 b1 c1
1 columnD_columnE_columnF d1 e1 f1
2 columnA_columnB_columnC a2 b2 c2
2 columnD_columnE_columnF d2 e2 f2
3 columnA_columnB_columnC a3 b3 c3
3 columnD_columnE_columnF d3 e3 f3
複数の列セットの名前を変更する例
UNPIVOT ( (LabelOldColumnValues1, LabelOldColumnValues2, LabelOldColumnValues3) FOR
LabeOldColumnNames IN ( (columnA, columnB, columnC) as 'gold', (columnD, columnE, columnF) as 'silver')
 
O LabeOldColumnNames LabelOldColumnValues1 LabelOldColumnValues2 LabelOldColumnValues3
 
1 gold a1 b1 c1
1 silver d1 e1 f1
2 gold a2 b2 c2
2 silver d2 e2 f2
3 gold a3 b3 c3
3 silver d3 e3 f3