對具有保留關聯的不同記錄進行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中文網其他相關文章!