Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Secara Dinamik dalam T-SQL?

Bagaimana untuk Mengubah Data Secara Dinamik dalam T-SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 20:10:48574semak imbas

How to Dynamically Pivot Data in T-SQL?

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 [email protected]
2 name John
2 phone 87654321
2 email [email protected]
3 name Sarah
3 phone 55667788
3 email [email protected]

Matlamat anda ialah untuk menukar jadual ini ke dalam format berikut:

ItemID name phone email
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!

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