SQL を使用した表形式データのピボット テーブルへの変換: 列の連結
データベース管理では、ピボット テーブルには列指向形式からのデータの変換が含まれます。行指向の形式に変換し、テーブルを効果的に「反転」します。この記事では、複数の列を含むテーブルを、元の列の値を連結した単一の列にピボットするシナリオについて説明します。
ID、TYPE、SUBTYPE、COUNT、およびMONTH は次のように配置されます:
ID TYPE SUBTYPE COUNT MONTH 1 A Z 1 7/1/2008 1 A Z 3 7/1/2008 2 B C 2 7/2/2008 1 A Z 3 7/2/2008
目的は、このデータをピボット テーブルに変換することです。 SUBTYPE 列は新しい列に連結され、ID と MONTH の一意の組み合わせごとに COUNT 値が合計されます。期待される出力は次のとおりです。
ID A_Z B_C MONTH 1 4 0 7/1/2008 2 0 2 7/2/2008 1 0 3 7/2/2008
SQL Server PIVOT ソリューション
SQL Server 2005 は、データ ピボットを簡素化する強力な PIVOT 演算子および UNPIVOT 演算子を提供します。次のコード例は、PIVOT 手法を示しています。
DECLARE @sql AS varchar(max) DECLARE @pivot_list AS varchar(max) DECLARE @select_list AS varchar(max) 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 stackoverflow_159456 ) AS PIVOT_CODES SET @sql = ' ;WITH p AS ( SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT] FROM stackoverflow_159456 GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM p PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS pvt ' EXEC (@sql)
このコードで使用されている動的 SQL 手法は、TYPE 値と SUBTYPE 値の個別の組み合わせに基づいて PIVOT ステートメントを自動的に生成し、ハードコーディングを回避してコードを作成します。メンテナンスフリー。
以上が列を連結して値を合計することで、SQL で表形式データをピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。