Rumah >pangkalan data >tutorial mysql >Bagaimana cara data pivot secara dinamik dalam SQL Server menggunakan pertanyaan dinamik?

Bagaimana cara data pivot secara dinamik dalam SQL Server menggunakan pertanyaan dinamik?

Barbara Streisand
Barbara Streisandasal
2025-01-25 18:56:09166semak imbas

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

Data pangsi dinamik dalam SQL Server menggunakan pertanyaan dinamik

Artikel ini menerangkan cara menukar data daripada lajur tarikh, kategori dan amaun kepada format yang lebih berstruktur yang mengumpulkan amaun mengikut tarikh dan kategori.

Untuk tujuan ini, pertanyaan pangsi dinamik boleh digunakan. Pivot ialah fungsi SQL Server yang membolehkan anda memutarkan baris jadual ke dalam lajur. Dalam kes ini, titik pangsi ialah lajur tarikh dan lajur yang terhasil akan menjadi kategori.

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);</code>

Untuk membina pertanyaan pangsi dinamik, kami mula-mula mentakrifkan dua pembolehubah: @cols untuk menahan kategori dan @query untuk menyimpan pertanyaan akhir.

<code class="language-sql">SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')</code>

Seterusnya, kami membina pembolehubah @cols dengan menggabungkan kategori berbeza dengan koma, memastikan ia disertakan dalam petikan berganda.

<code class="language-sql">set @query = 'SELECT date, ' + @cols + ' from 
            (
                select date
                    , amount
                    , category
                from temp
           ) x
            pivot 
            (
                 max(amount)
                for category in (' + @cols + ')
            ) p '</code>

Akhir sekali, kami menetapkan rentetan pertanyaan kepada @query. Pertanyaan bermula dengan memilih lajur tarikh dan semua kategori sebagai lajur. Ia kemudian menggunakan PIVOT untuk memutar data, dengan lajur tarikh sebagai pengepala baris dan kategori sebagai pengepala lajur.

<code class="language-sql">execute(@query)</code>

Melaksanakan @query akan mengembalikan hasil yang diingini, memutar data mengikut keperluan.

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

Atas ialah kandungan terperinci Bagaimana cara data pivot secara dinamik dalam SQL Server menggunakan pertanyaan dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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