ホームページ > データベース > mysql チュートリアル > さまざまなカテゴリを持つ SQL Server テーブルを動的にピボットする方法

さまざまなカテゴリを持つ SQL Server テーブルを動的にピボットする方法

DDD
リリース: 2025-01-25 18:47:11
オリジナル
544 人が閲覧しました

How to Dynamically Pivot a SQL Server Table with Varying Categories?

ダイナミックSQLを使用してデータの視点を実現

質問:

日付、カテゴリ、および金額列を含むデータセットは、動的カテゴリを持つパースペクティブテーブルに変換されます。たとえば、次のデータ:

に変換する必要があります:

<code>日期        类别        金额
2012年1月1日    ABC             1000.00
2012年2月1日    DEF             500.00
2012年2月1日    GHI             800.00
2012年2月10日   DEF             700.00
2012年3月1日    ABC             1100.00</code>
ログイン後にコピー
解決策:

<code>日期        ABC             DEF             GHI
2012年1月1日    1000.00
2012年2月1日                    500.00        800.00
2012年2月10日                   700.00
2012年3月1日    1100.00</code>
ログイン後にコピー
SQL Serverは、この変換を実現するために使用できる動的な視点関数を提供します。次のスクリプトは、達成方法を示しています

このメソッドは、動的なSQLを使用して、テーブルからさまざまなカテゴリを取得します。次に、すべての一意のカテゴリを検討するために、ピボット条項を動的に構築します。次に、それに応じて結果を参照して、データとカテゴリのデータを調整します。

結果:

<code class="language-sql">CREATE TABLE temp (
    date DATETIME,
    category VARCHAR(3),
    amount MONEY
);

INSERT INTO temp VALUES ('2012-01-01', 'ABC', 1000.00);
INSERT INTO temp VALUES ('2012-02-01', 'DEF', 500.00);
INSERT INTO temp VALUES ('2012-02-01', 'GHI', 800.00);
INSERT INTO temp VALUES ('2012-02-10', 'DEF', 700.00);
INSERT INTO temp VALUES ('2012-03-01', 'ABC', 1100.00);


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 ';


EXECUTE(@query);

DROP TABLE temp;</code>
ログイン後にコピー

以上がさまざまなカテゴリを持つ SQL Server テーブルを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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