首頁 > 資料庫 > 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 提供了動態透視功能,可以用來實現這種轉換。以下腳本演示瞭如何實現:

<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 從表中檢索不同的類別。然後,它動態地構造 PIVOT 子句,考慮所有唯一的類別。然後相應地透視結果,按日期和類別對齊數據。

結果:

<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>
登入後複製

以上是如何動態旋轉具有不同類別的SQL Server表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板