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番号の列があります。この場合、従業員250251256257、および260PurchaseOrderID列は値列として機能し、最終出力で返されるグループ化列と呼ばれる列がグループ化されます。この場合、グループ化列はCOUNT関数。PurchaseOrderID列に表示されるnull値が

重要

PIVOTで集計関数を使用する場合、集計を計算するときに、値の列にnull値が存在することは考慮されません。

UNPIVOTの例

UNPIVOTは、列を行に回転させることにより、PIVOTのほぼ逆の操作を実行します。前の例で作成されたテーブルがpvtとしてデータベースに保存されており、列識別子Emp1

Emp3Emp4、およびEmp5特定のベンダーに対応する行の値に。そのため、2つの追加の列を識別する必要があります。ローテーションする列の値を含む列(Emp1Emp2、…)は

であり、回転中の列の下に現在存在する値を保持する列はOrdersと呼ばれます。これらの列はpivot_columnとvalue_columnに対応します。 、それぞれ、Transact-SQL定義にあります。クエリは次のとおりです。

これは部分的な結果セットです。

注意してください。 UNPIVOTPIVOTの正反対ではありません。 PIVOTは集計を実行し、可能な複数の行を出力の1つの行にマージします。 UNPIVOTは、行がマージされているため、元のテーブル値式の結果を再現しません。また、UNPIVOTの入力のnull値が消えます。値が消えると、PIVOT操作の前に入力に元のnull値があった可能性があることを示します。

Sales.vSalesPersonSalesByFiscalYearsビューは、PIVOTを使用して、各会計年度の各営業担当者の総売上高を返します。SQLServerManagementStudioでビューをスクリプト化するには、オブジェクトエクスプローラーで、AdventureWorks2012データベースのViewsフォルダーの下にあるビューを見つけます。ビュー名を右クリックし、[Script Viewas]を選択します。

関連項目

FROM(Transact -SQL)
CASE(Transact-SQL)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です