概要:このチュートリアルでは、SQL Server PIVOT
演算子の使用方法を学習します。行を列に変換します。
目標の設定
デモンストレーションでは、production.products
とテーブル:
次のクエリは、各製品カテゴリの製品数を検索します。
出力は次のとおりです。
私たちの目標は、出力の最初の列のカテゴリ名を複数の列に変換し、それぞれの製品の数を数えることです。次の図のようなカテゴリ名:
さらに、モデル年を追加してカテゴリをグループ化できます次の出力に示すように、モデル年ごとのORY:
SQL ServerPIVOT演算子の概要
SQL Server PIVOT
演算子は、テーブル値の式をローテーションします。 1つの列の一意の値を出力の複数の列に変換し、残りの列の値に対して集計を実行します。
次の手順に従って、クエリをピボットテーブルにします。
- まず、ピボットするベースデータセットを選択します。
- 次に、派生テーブルまたは共通テーブル式(CTE)を使用して一時的な結果を作成します。
- 3番目に、
演算子。
次の例でこれらの手順を適用しましょう。
まず、
およびproduction.categories
テーブル:
次に、派生テーブルを使用して一時的な結果セットを作成します。
3番目に、PIVOT
演算子を適用します。
このクエリは次の出力を生成します:
これで、クエリの選択リストに追加する追加の列で、ベースデータは、ピボットテーブルに行グループを自動的に形成します。たとえば、上記のクエリにモデル年の列を追加できます。
出力は次のとおりです:
列値の生成
上記のクエリでは、
演算子を手動で。これを回避するには、QUOTENAME()
関数を使用してカテゴリ名リストを生成し、クエリにコピーします。
まず、カテゴリ名リストを生成します。
出力は次のようになります。
このスニペットの内容:
-
QUOTENAME()
関数は角かっこで囲まれたカテゴリ名(例: -
LEFT()
関数は、@ columns文字列から最後のカンマを削除します。
次に、出力からカテゴリ名リストをコピーしてクエリに貼り付けます。
動的ピボットテーブル
追加する場合production.categories
テーブルに新しいカテゴリ名を追加するには、クエリを書き直す必要がありますが、これは理想的ではありません。これを回避するには、動的SQLを使用してピボットテーブルを動的にすることができます。
このクエリでは、カテゴリ名の固定リストをPIVOT
演算子では、カテゴリ名リストを作成してSQLステートメントに渡し、ストアドプロシージャsp_executesql
を使用してこのステートメントを動的に実行します。
このチュートリアルでは、SQL Server PIVOT
テーブルを使用して行を列に変換する方法を学習しました。