首頁 > 資料庫 > mysql教程 > 如何使用 SQL 連線列、資料透視資料以及唯一 ID 和月份組合的總和計數?

如何使用 SQL 連線列、資料透視資料以及唯一 ID 和月份組合的總和計數?

DDD
發布: 2025-01-03 18:09:40
原創
654 人瀏覽過

How can SQL be used to concatenate columns, pivot data, and sum counts for unique ID and month combinations?

使用SQL 連線列與透視資料

問題:

問題:

問題:

您有一個資料庫表示ID、類型、子類型、計數和月份的欄位。如何將此資料轉換為新格式,其中類型和子類型連接到新列中,並對 ID 和月份的每個唯一組合的計數進行求和?

DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique

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 Server 2005 中的 PIVOT 運算子。 PIVOT 運算子可讓您將行動態轉置為
  1. 以下程式碼片段示範如何使用PIVOT 來實現所需的結果:
  2. 實作細節:
  3. 實作細節:
  4. 實作細節:
實作細節:

實作細節:實作細節:實作細節:實現細節: 產生動態資料透視清單:程式碼根據唯一的動態建立資料透視列清單原始表中類型和子類型的組合。 建構PIVOT 查詢: 主PIVOT 查詢首先建立一個名為「p」的公用表表達式(CTE),該表達式按ID 對資料進行分組,月份,以及串聯類型和子類型。然後,它將每個組的計數相加。 將行轉置為列: PIVOT 運算子應用於 CTE“p”,以將行轉置為列。資料透視列清單是使用 @pivot_list 變數動態產生的。 處理空值(可選):透過使用 COALESCE 函數,@select_list 變數中的 ISNULL() 條件可以是用於將透視列中的空值替換為零。 執行 @sql 變數將傳回帶有連接列和求和計數的所需表。該解決方案可以高效、動態地聚合複雜資料。

以上是如何使用 SQL 連線列、資料透視資料以及唯一 ID 和月份組合的總和計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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