T-SQL 中的動態資料透視
在資料處理領域,動態資料透視在將資料從行格式轉換為列格式方面起著至關重要的作用。當您需要以匯總和結構化的方式呈現資料時,這一點尤其有用。
假設您有一個表,其資料格式如下:
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] |
您的目標是將此表轉換為以下格式:
ItemID | name | phone | |
---|---|---|---|
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中文網其他相關文章!