首頁 > 資料庫 > mysql教程 > 如何使用動態透視在 T-SQL 中動態透視資料?

如何使用動態透視在 T-SQL 中動態透視資料?

Patricia Arquette
發布: 2025-01-14 20:11:43
原創
342 人瀏覽過

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

使用動態樞軸在 T-SQL 中轉換資料

有時需要將資料從寬格式轉換為更結構化的表格格式。考慮這樣一種情況:一個表包含多個不同資料類型和值的列,需要動態地透視資料以獲得一個結果集,該結果集為每個 ID 和相應的列值提供不同的行。

實現此轉換的一種方法是使用 T-SQL 的動態樞軸功能。以下範例示範如何使用 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>
登入後複製

執行上述腳本的結果將是一個透視表,其中包含每個 ID 和對應列值的不同的行。

以上是如何使用動態透視在 T-SQL 中動態透視資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板