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

Bagaimana untuk Mengubah Data Secara Dinamik dalam T-SQL Menggunakan Pangsi Dinamik?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 20:11:43343semak imbas

How to Dynamically Pivot Data in T-SQL Using a Dynamic Pivot?

Ubah data dalam T-SQL menggunakan pangsi dinamik

Kadangkala adalah perlu untuk menukar data daripada format lebar kepada format jadual yang lebih berstruktur. Pertimbangkan situasi di mana jadual mengandungi berbilang lajur jenis dan nilai data yang berbeza, dan data perlu dipangsi secara dinamik untuk mendapatkan set hasil yang menyediakan baris berbeza untuk setiap ID dan nilai lajur yang sepadan.

Satu cara untuk mencapai penukaran ini ialah menggunakan ciri pangsi dinamik T-SQL. Contoh berikut menunjukkan cara untuk menukar data secara dinamik menggunakan T-SQL:

<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 
                        -- 按 ID 排序以确保列顺序一致
                        ORDER BY '],[' + CAST(t.ID AS VARCHAR(10)) 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']' 

SELECT  @cols;

-- 动态构建 PIVOT 查询
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;'; 

-- 执行动态 PIVOT 查询
EXECUTE(@query);

-- 删除临时表
DROP TABLE #Table;</code>

Hasil pelaksanaan skrip di atas akan menjadi jadual pangsi dengan baris yang berbeza untuk setiap ID dan nilai lajur yang sepadan.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dalam T-SQL Menggunakan Pangsi Dinamik?. 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