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
Lepaskan: 2025-01-25 18:56:09
asal
158 orang telah melayarinya

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

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

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

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan