Pangsi Dinamik dalam T-SQL
Dalam bidang pemprosesan data, pangsi dinamik memainkan peranan penting dalam menukar data daripada format baris kepada format lajur. Ini amat berguna apabila anda perlu membentangkan data dalam cara terkumpul dan berstruktur.
Andaikan anda mempunyai jadual dengan data dalam format berikut:
ItemID | ColumnName | Value |
---|---|---|
1 | name | Peter |
1 | phone | 12345678 |
1 | [email protected] | |
2 | name | John |
2 | phone | 87654321 |
2 | [email protected] | |
3 | name | Sarah |
3 | phone | 55667788 |
3 | [email protected] |
Matlamat anda ialah untuk menukar jadual ini ke dalam format berikut:
ItemID | name | phone | |
---|---|---|---|
1 | Peter | 12345678 | [email protected] |
2 | John | 87654321 | [email protected] |
3 | Sarah | 55667788 | [email protected] |
Pasi Dinamik dalam T-SQL membolehkan anda melaksanakan transformasi ini secara dinamik tanpa memerlukan pernyataan SQL statik. Kod berikut menunjukkan cara untuk menyelesaikan tugas ini:
<code class="language-sql">CREATE TABLE #Table ( ID INT, ColumnName VARCHAR(250), Value VARCHAR(250) ) INSERT INTO #Table SELECT 1,'name','Peter' INSERT INTO #Table SELECT 1,'phone','12345678' INSERT INTO #Table SELECT 1,'email','[email protected]' INSERT INTO #Table SELECT 2,'name','John' INSERT INTO #Table SELECT 2,'phone','87654321' INSERT INTO #Table SELECT 2,'email','[email protected]' INSERT INTO #Table SELECT 3,'name','Sarah' INSERT INTO #Table SELECT 3,'phone','55667788' INSERT INTO #Table SELECT 3,'email','[email protected]' DECLARE @cols NVARCHAR(2000) DECLARE @query NVARCHAR(4000) SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + t.ColumnName FROM #Table AS t FOR XML PATH('') ), 1, 2, '') + ']' SET @query = N'SELECT ID,'+ @cols +' FROM (SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) AS pvt;' EXECUTE(@query) DROP TABLE #Table</code>
Dalam kod ini, fungsi STUFF dan EXECUTE digunakan untuk membina pernyataan SQL dinamik. Pertanyaan yang dibina secara dinamik menjana pernyataan PIVOT berdasarkan nama lajur yang berbeza dalam jadual. Fungsi agregat MAX() memastikan bahawa nilai terkini untuk setiap lajur dikembalikan.
Hasil akhir ialah jadual ditukar yang memenuhi keperluan anda untuk membentangkan data anda dalam format pangsi. Teknik ini amat berguna apabila bekerja dengan set data yang lebih besar dan struktur data yang kompleks.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dalam T-SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!