FROM-PIVOTとUNPIVOTの使用
- 2019年10月14日
- 5分で読む
-
-
V -
c -
M -
i -
M -
+7
-
適用対象:
SQL Server(サポートされているすべてのバージョン)
AzureSQLデータベース
AzureSQLマネージドインスタンス
Azure Synapse Analytics
並列データウェアハウス
PIVOTおよびUNPIVOTリレーショナル演算子を使用してテーブル値の式を別のテーブルに変更します。 PIVOTは、式の1つの列の一意の値を出力の複数の列に変換することにより、テーブル値の式をローテーションします。また、PIVOTは、最終出力で必要な残りの列値で必要な場合に集計を実行します。UNPIVOTは反対の操作を実行します。テーブル値式の列を列値に回転させることにより、PIVOTに変換します。
PIVOTの構文は、他の方法よりも単純で読みやすくなっています。複雑な一連のSELECT...CASEステートメントで指定されます。PIVOTの構文の詳細については、FROM(Transact-SQL)を参照してください。
構文
次の構文は、PIVOT演算子の使用方法をまとめたものです。
備考
UNPIVOT句の列識別子はカタログの照合に続きます。SQLデータベースの場合、照合は常にSQL_Latin1_General_CP1_CI_ASです。SQLServerの場合、部分的に含まれていますデータベースの場合、照合は常にLatin1_General_100_CI_AS_KS_WS_SCです。列が結合されている場合他の列と編集する場合は、競合を回避するためにcollate句(COLLATE DATABASE_DEFAULT)が必要です。
基本的なPIVOTの例
次のコード例4行の2列のテーブルを生成します。
結果セットは次のとおりです。
3つのDaysToManufactureで定義されている製品はありません。
次のコードは、の値が列見出しになります。結果がNULLであっても、列は3つの日間提供されます。
これが結果セットです。 。
複雑なPIVOTの例
PIVOTが役立つ一般的なシナリオは次のとおりです。データの要約を提供するためにクロス集計レポートを生成する場合。たとえば、AdventureWorks2014サンプルデータベースのPurchaseOrderHeaderテーブルにクエリを実行して、特定の従業員による注文書の数を確認するとします。次のクエリは、ベンダー順に並べられたこのレポートを提供します。
これは部分的な結果セットです。
この副選択によって返される結果ステートメントは、EmployeeID列でピボットされます。
列は最終結果セットのフィールドになります。そのため、ピボット句で指定された各EmployeeID番号の列があります。この場合、従業員250、251、256、257、および260。PurchaseOrderID列は値列として機能し、最終出力で返されるグループ化列と呼ばれる列がグループ化されます。この場合、グループ化列はCOUNT関数。PurchaseOrderID列に表示されるnull値が
。
重要
PIVOTで集計関数を使用する場合、集計を計算するときに、値の列にnull値が存在することは考慮されません。
UNPIVOTの例
UNPIVOTは、列を行に回転させることにより、PIVOTのほぼ逆の操作を実行します。前の例で作成されたテーブルがpvtとしてデータベースに保存されており、列識別子Emp1、
、Emp3、Emp4、およびEmp5特定のベンダーに対応する行の値に。そのため、2つの追加の列を識別する必要があります。ローテーションする列の値を含む列(Emp1、Emp2、…)は
であり、回転中の列の下に現在存在する値を保持する列はOrdersと呼ばれます。これらの列はpivot_columnとvalue_columnに対応します。 、それぞれ、Transact-SQL定義にあります。クエリは次のとおりです。
これは部分的な結果セットです。
注意してください。 UNPIVOTはPIVOTの正反対ではありません。 PIVOTは集計を実行し、可能な複数の行を出力の1つの行にマージします。 UNPIVOTは、行がマージされているため、元のテーブル値式の結果を再現しません。また、UNPIVOTの入力のnull値が消えます。値が消えると、PIVOT操作の前に入力に元のnull値があった可能性があることを示します。
Sales.vSalesPersonSalesByFiscalYearsビューは、PIVOTを使用して、各会計年度の各営業担当者の総売上高を返します。SQLServerManagementStudioでビューをスクリプト化するには、オブジェクトエクスプローラーで、AdventureWorks2012データベースのViewsフォルダーの下にあるビューを見つけます。ビュー名を右クリックし、[Script Viewas]を選択します。
関連項目
FROM(Transact -SQL)
CASE(Transact-SQL)