使用SQL 將表格資料轉換為資料透視表:連接列
在資料庫管理中,資料透視表涉及將資料從面向列的格式轉換轉換為面向行的格式,有效地「翻轉」表格。本文討論了一個場景,您希望將具有多列的表轉換為具有原始列的串聯值的單列。
假設您有一個包含ID、TYPE、SUBTYPE、COUNT 和列的資料集MONTH,排列如下:
ID TYPE SUBTYPE COUNT MONTH 1 A Z 1 7/1/2008 1 A Z 3 7/1/2008 2 B C 2 7/2/2008 1 A Z 3 7/2/2008
目標是將這些資料轉換為資料透視表,其中TYPE和SUBTYPE 列是連接成一個新列,並對ID 和MONTH 的每個唯一組合的COUNT 值進行求和。預期輸出為:
ID A_Z B_C MONTH 1 4 0 7/1/2008 2 0 2 7/2/2008 1 0 3 7/2/2008
SQL Server PIVOT 解決方案
SQL Server 2005 提供了強大的 PIVOT 和 UNPIVOT 運算符,可以簡化資料透視。以下程式碼範例示範了 PIVOT 技術:
DECLARE @sql AS varchar(max) DECLARE @pivot_list AS varchar(max) DECLARE @select_list AS varchar(max) SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']' ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']' FROM ( SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE FROM stackoverflow_159456 ) AS PIVOT_CODES SET @sql = ' ;WITH p AS ( SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT] FROM stackoverflow_159456 GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM p PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS pvt ' EXEC (@sql)
此程式碼中使用的動態 SQL 技術根據 TYPE 和 SUBTYPE 值的不同組合自動產生 PIVOT 語句,避免了硬編碼並使程式碼免維護。
以上是如何透過連接列和求和值來透視 SQL 中的表格資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!