揭開SQL Server 中PIVOT 的秘密
我們常常會遇到一些資料集,其中資料的結構化方式使得分析變得困難並以有意義的形式呈現。當資料被組織成多個欄位時,就會出現這樣的情況,每個欄位代表特定類別的不同值。要將這些資料集轉換為以類別為列、值為行的表,我們可以在 SQL Server 中使用 PIVOT 運算子。
讓我們考慮一個場景,其中我們有一個名為「mytable」、列為「Name1」的表、「名稱2」和「值」。此表中的資料代表與不同名稱(「A」和「B」)相關的各種值(「P1」、「P2」、「P3」、「P4」):
Name1 Name2 Value A P1 1 A P2 1 A P3 2 B P1 3 B P2 1 B P4 1
我們的目標是將這些資料重組為以下格式:
A B P1 1 4 P2 1 1 P3 2 NULL P4 NULL 1
在SQL Server 2005 中,我們可以利用動態查詢建構來使用PIVOT來完成此轉換。以下是逐步指南:
組裝以逗號分隔的列名稱字串: 執行以下查詢以建立一個包含所有不同「Name1」的字串"數值之間用逗號:
DECLARE @cols VARCHAR(1000) SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Name1]) FROM myTable FOR XML PATH('') ), 1, 1, '')
建構動態SQL查詢: 建立一個名為@sqlquery 的變量,並為其分配以下查詢模板:
DECLARE @sqlquery VARCHAR(2000) SET @sqlquery = 'SELECT * FROM (SELECT Name2, Name1, Value FROM myTable ) base PIVOT (Sum(Value) FOR [Name1] IN (' + @cols + ')) AS finalpivot'
以上是SQL Server 的 PIVOT 運算子如何將多列資料重塑為面向行的格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!