SQL Server 動的ピボット クエリ
この記事では、カテゴリを列、日付を行として、データセットを垂直形式から水平形式に変換する方法について説明します。これは通常、PIVOT 演算子を使用して実現されます。
次の SQL コードは、temp
という名前の一時テーブル内のデータセットを初期化します。 PIVOT クエリの構築には動的 SQL が使用されます。 @cols
変数は、さまざまなカテゴリをカンマ区切りの文字列に連結します。 @query
変数は、日付ごとにグループ化し、カテゴリごとにピボットする実際の PIVOT クエリを構築します。
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT date, ' + @cols + ' from ( select date , amount , category from temp ) x pivot ( max(amount) for category in (' + @cols + ') ) p '</code>
このクエリを実行すると、望ましい結果が得られます:
<code>日期 ABC DEF GHI 2012-01-01 00:00:00.000 1000.00 NULL NULL 2012-02-01 00:00:00.000 NULL 500.00 800.00 2012-02-10 00:00:00.000 NULL 700.00 NULL 2012-03-01 00:00:00.000 1100.00 NULL NULL</code>
この動的なアプローチにより、クエリ構造を変更せずに、必要に応じてカテゴリを調整できます。パフォーマンスの問題を避けるために、使用後は必ず一時テーブルを削除してください。
以上がSQL Serverでデータを動的にピボットする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。