首頁 > 資料庫 > mysql教程 > 如何透過連接列和求和值來透視 SQL 中的表格資料?

如何透過連接列和求和值來透視 SQL 中的表格資料?

Barbara Streisand
發布: 2025-01-04 17:39:41
原創
435 人瀏覽過

How to Pivot Tabular Data in SQL by Concatenating Columns and Summing Values?

使用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中文網其他相關文章!

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