SQL Server のピボット テーブルと列の連結
データをより整理された意味のある方法で表示するためにデータベース テーブルを変換することは、多くの場合、データのために必要です。分析とプレゼンテーション。この特定のケースの目標は、データベース テーブルから「ピボット テーブル」を作成することです。ここで、TYPE 列と SUBTYPE 列が新しい列に連結され、COUNT 値が ID 列と MONTH 列によって集計されます。
PIVOT 演算子について理解する
SQL Server は PIVOT 演算子を提供しており、これを使用してデータを変換できます。行指向形式から列指向形式へ。データを 1 つ以上の列でグループ化し、別の列の値に基づいて新しい列を作成できます。
ピボット列の動的生成
指定されたシナリオの場合、TYPE と SUBTYPE の組み合わせが「100」個ある可能性があるため、ピボット列をハードコーディングするのは現実的ではありません。これを解決するには、動的 SQL を使用して、TYPE 値と SUBTYPE 値の一意の組み合わせに基づいてピボット列リストを生成できます。
動的 SQL の実装
次の SQLこのコードは、ピボット列を動的に生成し、PIVOT を実行する方法を示しています。操作:
DECLARE @sql AS NVARCHAR(MAX); DECLARE @pivot_list AS NVARCHAR(MAX) = NULL; -- Leave NULL for COALESCE technique DECLARE @select_list AS NVARCHAR(MAX) = NULL; -- Leave NULL for COALESCE technique -- Build the pivot column list and select list SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']', @select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']' FROM ( SELECT DISTINCT TYPE + '_' + SUBTYPE AS PIVOT_CODE FROM YourTableName ) AS PIVOT_CODES; -- Generate the dynamic SQL query SET @sql = ' WITH P AS ( SELECT ID, [MONTH], TYPE + ''_'' + SUBTYPE AS PIVOT_CODE, SUM(COUNT) AS [COUNT] FROM YourTableName GROUP BY ID, [MONTH], TYPE + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM P PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS PVT'; -- Execute the dynamic SQL query EXEC (@sql);
動的 SQL を使用する利点
動的 SQL を使用すると、ピボット列が自動的に生成され、手動で連結する必要がなくなります。このアプローチは柔軟で、多数の TYPE と SUBTYPE の組み合わせを持つテーブルに適用できます。
注:
上記のコードは、COALESCE 関数を使用してピボット列リストを連結しています。そしてリストを選択します。あるいは、必要に応じて連結演算子 (「,」または「;」) を手動で指定することもできます。
以上がSQL Server で列が連結されたピボット テーブルを動的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。