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

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

Patricia Arquette
Patricia Arquette原創
2025-01-14 20:10:48576瀏覽

How to Dynamically Pivot Data in T-SQL?

T-SQL 中的動態資料透視

在資料處理領域,動態資料透視在將資料從行格式轉換為列格式方面起著至關重要的作用。當您需要以匯總和結構化的方式呈現資料時,這一點尤其有用。

假設您有一個表,其資料格式如下:

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]

您的目標是將此表轉換為以下格式:

ItemID name phone email
1 Peter 12345678 [email protected]
2 John 87654321 [email protected]
3 Sarah 55667788 [email protected]

T-SQL 中的動態資料透視可讓您動態地實作此轉換,而無需靜態 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 
                        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>

在此程式碼中,使用 STUFF 和 EXECUTE 函數建構動態 SQL 語句。建構的查詢會根據表中不同的列名動態產生 PIVOT 語句。 MAX() 聚合函數確保傳回每列的最新值。

最終結果是轉換後的表,它滿足您以透視格式呈現資料的需求。當處理更大的資料集和複雜的資料結構時,此技術尤其有用。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn