首页 >数据库 >mysql教程 >如何在保留关联和处理零值的同时对不同记录执行 PIVOT 查询?

如何在保留关联和处理零值的同时对不同记录执行 PIVOT 查询?

Barbara Streisand
Barbara Streisand原创
2024-12-24 06:49:14437浏览

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