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)