Pertanyaan Pangsi Dinamik Pelayan SQL
Artikel ini menerangkan cara menukar set data daripada format menegak kepada format mendatar, dengan kategori sebagai lajur dan tarikh sebagai baris. Ini biasanya dicapai menggunakan pengendali PIVOT.
Kod SQL berikut memulakan set data dalam jadual sementara bernama temp
. SQL Dinamik digunakan untuk membina pertanyaan PIVOT. @cols
Pembolehubah menggabungkan kategori yang berbeza ke dalam rentetan dipisahkan koma. @query
Pembolehubah membina pertanyaan PIVOT sebenar, mengumpulkan mengikut tarikh dan berputar mengikut kategori.
<code class="language-sql">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 '</code>
Melaksanakan pertanyaan ini akan menghasilkan hasil yang diingini:
<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>
Pendekatan dinamik ini membolehkan kategori dilaraskan mengikut keperluan tanpa mengubah struktur pertanyaan. Ingat untuk memadamkan jadual sementara selepas digunakan untuk mengelakkan masalah prestasi.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!