对具有保留关联的不同记录进行 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中文网其他相关文章!