按字母顺序排列的数据透视表

Posted

技术标签:

【中文标题】按字母顺序排列的数据透视表【英文标题】:Pivot table in alphabetical order 【发布时间】:2021-02-03 16:40:34 【问题描述】:

我是 mysql 新手,我想旋转一个表 表仅包含两列 NameOccupation 其中没有 null 值是 inserted

我想旋转职业列,以便每个名称按字母顺序排序并显示在其对应的职业下方。输出列标题应为 Doctor、Professor、Singer 和 Actor 我尝试了这个查询,在哪里能够让它们到达该列的旋转点

SELECT ( CASE 
           WHEN occupation = 'Doctor' THEN NAME 
           ELSE NULL 
         END ) AS 'Doctor', 
       ( CASE 
           WHEN occupation = 'Professor' THEN NAME 
           ELSE NULL 
         END ) AS 'Professor', 
       ( CASE 
           WHEN occupation = 'Singer' THEN NAME 
           ELSE NULL 
         END ) AS 'Singer', 
       ( CASE 
           WHEN occupation = 'Actor' THEN NAME 
           ELSE NULL 
         END ) AS 'Actor' 
FROM   occupations 
ORDER  BY NAME;

我的输出为:

Aamina NULL NULL NULL
NULL Ashley NULL NULL
NULL Belvet NULL NULL
NULL Britney NULL NULL
NULL NULL Christeen NULL
NULL NULL NULL Eve
NULL NULL Jane NULL
NULL NULL NULL Jennifer
NULL NULL Jenny NULL
Julia NULL NULL NULL
NULL NULL NULL Ketty
NULL NULL Kristeen NULL
NULL Maria NULL NULL
NULL Meera NULL NULL
NULL Naomi NULL NULL
Priya NULL NULL NULL
NULL Priyanka NULL NULL
NULL NULL NULL Samantha

我不知道如何获得如下输出:

Aamina Ashley Christeen Eve
Julia Belvet Jane Jennifer
Priya Britney Jenny Ketty
NULL Maria Kristeen Samantha
NULL Meera NULL NULL
NULL Naomi NULL NULL
NULL Priyanka NULL NULL

如果有人可以向我解释一下,那将非常有帮助。谢谢

【问题讨论】:

认真考虑处理应用代码中数据显示的问题。但是,如需进一步帮助,请参阅 meta.***.com/questions/333952/… 我已经阅读了,我一定会照顾它的,谢谢 我没有屏住呼吸 【参考方案1】:

您可以使用窗口函数(在 MySQL 8.0 中可用)和聚合来做到这一点:

select 
    max(case when occupation = 'Doctor'    then name end) doctor,
    max(case when occupation = 'Professor' then name end) professor,
    max(case when occupation = 'Singer'    then name end) singer,
    max(case when occupation = 'Actor'     then name end) actor
from (
    select o.*,
        row_number() over(partition by occupation order by name) rn
    from occupations o
) o
group by rn

【讨论】:

谢谢,但是你能解释一下你做了什么吗?你为什么这样做? @SwapnilPadaya:当然。子查询按升序排列具有相同职业的记录。然后外部查询进行旋转,并将每个职业放在不同的列中。您可以运行子查询并查看结果以更好地了解其工作原理。 谢谢你已经明白你做了什么,现在我知道我需要改进子查询和聚合函数。

以上是关于按字母顺序排列的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法自己设置access里面的数据的排序顺序

SQL 动态数据透视表列顺序

如何将excel表格中数据透视后的汇总一栏去掉呢?

如何刷新数据透视图

分类汇总和数据透视表的优缺点

Lumen/Laravel Eloquent - 按数据透视表中的属性过滤