首頁 >資料庫 >mysql教程 >對零值的不同記錄使用 PIVOT 查詢時如何避免資料遺失?

對零值的不同記錄使用 PIVOT 查詢時如何避免資料遺失?

DDD
DDD原創
2025-01-05 20:20:41976瀏覽

How to Avoid Data Loss When Using PIVOT Queries on Distinct Records with Zero Values?

避免不同記錄的PIVOT 查詢中的資料遺失

問題:

問題:PIVOT 查詢對於重組很有用資料以更有組織的方式顯示資訊。但是,在處理不同記錄時,MAX 聚合函數可能會導致零值被省略,從而導致資料不完整。

;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
解:

保留所有不同記錄,甚至是那些如果值為零,則可以將 ROW_NUMBER() 函數合併到 PIVOT 查詢中。此方法為每筆記錄指派一個行號,從而維護活動和百分比之間的關聯。

範例:
Id Code percentage name name1 activity
1 Prashant 43.43 James James_ Running
1 Prashant 70.43 Sam Sam_ Cooking
1 Prashant 90.34 Lisa Lisa_ Walking
1 Prashant 0.00 James James_ Stealing
1 Prashant 0.00 James James_ Lacking
1 Prashant 73 Sam Sam_ Cooking 1

考慮下表:
Id Code James James_ Sam Sam_ Lisa Lisa_
1 Prashant Running 43.43 Cooking 1 73 Walking 90.34
1 Prashant Stealing 0.0 Cooking 3.43 NULL NULL
1 Prashant NULL NULL NULL NULL NULL NULL

以前,標準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

但是,透過合併ROW_NUMBER()函數,修改後的查詢保留所有不同的記錄:此方法可確保顯示所有不同的活動,甚至是那些百分比值為零,提供更準確的資料表示。

以上是對零值的不同記錄使用 PIVOT 查詢時如何避免資料遺失?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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