ホームページ > データベース > mysql チュートリアル > 動的SQLを使用してSQL Serverでデータを動的にピボットする方法は?

動的SQLを使用してSQL Serverでデータを動的にピボットする方法は?

Patricia Arquette
リリース: 2025-01-25 19:02:10
オリジナル
520 人が閲覧しました

動的 SQL を使用した SQL Server の動的ピボット データ

この記事では、動的 SQL を使用して SQL Server 内のデータを動的にピボットする方法を紹介します。

質問

「日付」、「カテゴリ」、「金額」列を持つテーブルがある場合、目標は、カテゴリが列になり、日付が行になるピボット形式にデータを変換することです。変換されたデータは次のようになります:

<code>日期        ABC             DEF             GHI
1/1/2012    1000.00
2/1/2012                    500.00
2/1/2012                                    800.00
2/10/2012                   700.00
3/1/2012    1100.00</code>
ログイン後にコピー

解決策

SQL Server で動的ピボットを実装するには、動的 SQL を使用できます。詳しい手順は次のとおりです:

  1. 一時テーブルの作成: この手順は必須ではありませんが、ピボットに使用されるデータを保存するために推奨されます。
  2. 動的列リストの構築: FOR XML PATH() を含む SELECT ステートメントを使用して、さまざまなカテゴリ値を取得し、引用符で囲まれたカテゴリ名のカンマ区切りリストを構築します。
  3. 動的クエリを構築します: 列リストを必要な PIVOT クエリ構文と連結します。このクエリは、max() を使用して、各カテゴリと日付の組み合わせごとに金額値を集計します。
  4. 動的クエリの実行: sp_executesql ストアド プロシージャを使用して動的クエリを実行します。結果はピボットされたデータになります。

サンプルコード

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

-- 插入示例数据
INSERT INTO temp VALUES ('1/1/2012', 'ABC', 1000.00);
INSERT INTO temp VALUES ('2/1/2012', 'DEF', 500.00);
INSERT INTO temp VALUES ('2/1/2012', 'GHI', 800.00);
INSERT INTO temp VALUES ('2/10/2012', 'DEF', 700.00);
INSERT INTO temp VALUES ('3/1/2012', '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>
ログイン後にコピー

結果

<code>日期                        ABC         DEF    GHI
2012-01-01 00:00:00.000     1000.00     NULL    NULL
2012-02-01 00:00:00.000     NULL        500.00  800.00
2012-02-10 00:00:00.000     NULL        700.00  NULL
2012-03-01 00:00:00.000     1100.00     NULL    NULL</code>
ログイン後にコピー

How to Dynamically Pivot Data in SQL Server Using Dynamic SQL?

以上が動的SQLを使用してSQL Serverでデータを動的にピボットする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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