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!