首頁 >資料庫 >mysql教程 >如何在保留關聯和處理零值的同時對不同記錄執行 PIVOT 查詢?

如何在保留關聯和處理零值的同時對不同記錄執行 PIVOT 查詢?

Barbara Streisand
Barbara Streisand原創
2024-12-24 06:49:14479瀏覽

How Can I Perform a PIVOT Query on Distinct Records While Preserving Associations and Handling Zero Values?

對具有保留關聯的不同記錄進行PIVOT 查詢

考慮這樣的場景:我們有一個表,其中的數據包含個人的活動和百分比。使用 MAX 函數的標準 PIVOT 查詢可能會忽略百分比值為零的活動。為了解決這個問題,我們引入了一種保留活動和百分比之間關係的解決方案。

為了實現這一點,我們將 ROW_NUMBER() 函數合併到公共表表達式 (CTE) 中,以按順序對每個活動中的活動進行排序名組。透過這種技術,PIVOT 查詢可以保留多行中的活動和百分比之間的關聯。

以下是修改後的查詢的範例:

;with cte as 
(
    select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM
    from A
),
cte2 as
(
    SELECT Id,Code,ROWNUM,James,James_,Sam,Sam_,Lisa,Lisa_
    FROM cte
    PIVOT(MAX(activity)
          FOR name IN (James,Sam,Lisa)) AS PVTTable PIVOT
          (
          MAX(percentage)
          FOR name1 IN (James_,Sam_,Lisa_)) AS PVTTable1
)
select Id, Code, MAX(James) James, MAX(James_) James_, MAX(Sam) Sam, MAX(Sam_) Sam_, MAX(Lisa) Lisa, MAX(Lisa_) Lisa_
from cte2
group by Id, Code, ROWNUM

CTE cte 新增了 ROWNUM列新增到初始表中,按百分比降序對每個名稱的活動進行排序。此順序允許後續 PIVOT 查詢正確分組和聚合資料。

查詢的輸出將類似於預期結果,其中不同的活動與其各自的名稱和百分比相關聯:

Id  Code        James       James_  Sam         Sam_    Lisa    Lisa_
1   Prashant    Running     43.43   Cooking 1   73      Walking 90.34
1   Prashant    Stealing    0.00    Cooking     3.43    NULL    NULL
1   Prashant    Lacking     0.00    NULL        NULL    NULL    NULL

使用此技術,我們可以獲得完整且準確的PIVOT 結果,同時保留活動和百分比之間的關聯,即使對於百分比值為零的記錄也是如此。

以上是如何在保留關聯和處理零值的同時對不同記錄執行 PIVOT 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn