ホームページ > データベース > mysql チュートリアル > 列を連結して値を合計することで、SQL で表形式データをピボットする方法

列を連結して値を合計することで、SQL で表形式データをピボットする方法

Barbara Streisand
リリース: 2025-01-04 17:39:41
オリジナル
477 人が閲覧しました

How to Pivot Tabular Data in SQL by Concatenating Columns and Summing Values?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート