保留不同記錄的動態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使用 ROW_NUMBER() 作為 PIVOT 查詢中的附加欄位。輸出將匹配不同的名稱行及其各自的活動和百分比。
重新分組以進行動態聚合:
資料透視後,依 Id、Code 和 ROW_NUMBER() 將資料分組。此步驟組合每個不同名稱行的百分比值。動態查詢生成:
對於動態查詢生成,請替換逗號分隔的列表名稱(@name_concat, @name1_concat) 和SELECT MAX () 聚合(@select_aggs),其變數可以是在執行時填入。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 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!