Rumah > pangkalan data > tutorial mysql > Bagaimana secara dinamik berputar jadual SQL Server dengan kategori yang berbeza -beza?

Bagaimana secara dinamik berputar jadual SQL Server dengan kategori yang berbeza -beza?

DDD
Lepaskan: 2025-01-25 18:47:11
asal
544 orang telah melayarinya

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

Gunakan SQL dinamik untuk melaksanakan pangsi data

Soalan:

Tukar set data yang mengandungi lajur tarikh, kategori dan amaun kepada jadual pangsi dengan kategori dinamik. Contohnya, data berikut:

<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>
Salin selepas log masuk

perlu ditukar kepada:

<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>
Salin selepas log masuk

Penyelesaian:

SQL Server menyediakan fungsi pangsi dinamik yang boleh digunakan untuk mencapai penukaran ini. Skrip berikut menunjukkan cara melakukannya:

<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>
Salin selepas log masuk

Kaedah ini menggunakan SQL dinamik untuk mendapatkan semula kategori berbeza daripada jadual. Ia kemudian membina klausa PIVOT secara dinamik, dengan mengambil kira semua kategori unik. Hasilnya kemudian dipangsi dengan sewajarnya, menjajarkan data mengikut tarikh dan kategori.

Keputusan:

<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana secara dinamik berputar jadual SQL Server dengan kategori yang berbeza -beza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan