PIVOT
PIVOT演算子は、式の1つの列の一意の値を出力の複数の列に変換することでテーブル値の式をローテーションし、最終出力で必要な残りの列値に対して必要な集計を実行します。
構文
pivot_clause : table_reference
PIVOT LEFT_PAREN aggregate_function ( AS alias )? (COMMA aggregate_function ( AS alias )? )*
pivot_for_clause
pivot_in_clause
RIGHT_PAREN
pivot_for_clause : FOR ( column
| LEFT_PAREN column ( COMMA column )* RIGHT_PAREN
)
pivot_in_clause : IN LEFT_PAREN ( expression ( AS identifier )? ( COMMA expression ( AS identifier )? )*
| pivot_multiple_columns ( COMMA pivot_multiple_columns )*
| subquery
| ANY
)
RIGHT_PAREN
pivot_multiple_columns : LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN
( AS identifier )?
備考
•ピボット演算子は、左側のtable_referenceの投影を入力として受け取ります。集計関数の引数は、table_referenceからの射影である必要があります。
•pivot_for_clause句で指定された列は、table_referenceからの射影である必要があります。そして、IN句の式と照合されます。
•table_referenced内の他のすべてのプロジェクションは、GROUP'edBYになります。
例
SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp4
FROM
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(COUNT (PurchaseOrderID)
FOR EmployeeID IN
( 250 as Emp1, 251 as Emp2, 256 as Emp3, 257 as Emp4, 260 as Emp5 )
) AS pvt
PIVOT演算子は、基本的に次のSQLを呼び出します。
select VendorID, COUNT (PurchaseOrderID), EmployeeID
FROM Purchasing.PurchaseOrderHeader
WHERE EmployeeID IN 250, 251, 256, 257, 260)
GROUP BY VendorID, EmployeeID
上記のSQLの結果セットの例は次のとおりです。
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( 250 as Emp1, 251 as Emp2, 256 as Emp3, 257 as Emp4, 260 as Emp5)
)
VendorID Emp1 Emp2 Emp3 Emp4 Emp5
1492 2 5 4 4 4
1494 2 5 4 5 4
1496 2 4 4 5 5
1498 2 5 4 4 4
1500 3 4 4 5 4