ホームページ > データベース > mysql チュートリアル > SQL Server で列が連結されたピボット テーブルを動的に作成する方法

SQL Server で列が連結されたピボット テーブルを動的に作成する方法

Patricia Arquette
リリース: 2025-01-05 14:32:41
オリジナル
543 人が閲覧しました

How to Dynamically Create a Pivot Table with Concatenated Columns in SQL Server?

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

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