mySQL 透视表。删除 NULL 值

mySQL pivoting a table . Removing NULL values

提问人:physicsuser 提问时间:8/24/2022 最后编辑:physicsuser 更新时间:11/15/2023 访问量:256

问:

因此,我必须对表进行透视,并将所有缺失的值替换为 null。当我尝试对新列进行排序时,问题就开始了。所有 null 值都出现在开头,有没有办法让我以某种方式修剪列的总长度或排除 Null,直到达到第一个名称?

问题来了:在“职业”中透视“职业”列,使每个“名称”按字母顺序排序,并显示在其对应的“职业”下方。输出列标题应分别为 Doctor、Professor、Singer 和 Actor。

注意:当没有更多与职业对应的名称时,请打印 NULL。

表格概览 : https://i.stack.imgur.com/48zB1.png

到目前为止我尝试过什么:

SELECT  
    CASE WHEN occupation = 'Doctor' THEN name  END AS col1,
    CASE WHEN occupation = 'Professor' THEN name END as col2,
    CASE WHEN occupation = 'Singer' THEN name END as col3,
    CASE WHEN occupation = 'Actor' THEN name END as col4
    FROM OCCUPATIONS
    GROUP BY occupation,name
    order by col1,col2,col3,col4 ASC;

我得到的:

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

我想找回的内容示例:

Jenny    Ashley     Meera  Jane
Samantha Christeen  Priya  Julia
NULL     Ketty      NULL   Maria
MySQL 排序 透视

评论

0赞 P.Salmon 8/24/2022
您需要一个预备步骤来计算每个名称应属于每列的行。请将示例数据添加为文本。
0赞 Akina 8/24/2022
meta.stackoverflow.com/questions/333952/......还有 meta.stackoverflow.com/questions/271055/......

答:

0赞 P.Salmon 8/24/2022 #1

分配行号并按其分组

drop table if exists t;

create table t(name varchar(1), occupation varchar(2));
insert into t values
('b','dr'),('a','dr'),('c','dr'),
('z','ok'),('a','ok');


with cte as
(select name, occupation, 
         row_number() over (partition by occupation order by name) rn
from t)
select   rn,
            max(case when occupation = 'dr' then name else null end) 'dr',
            max(case when occupation = 'ok' then name else null end) 'ok'
from cte
group by rn;

+----+------+------+
| rn | dr   | ok   |
+----+------+------+
|  1 | a    | a    |
|  2 | b    | z    |
|  3 | c    | NULL |
+----+------+------+
3 rows in set (0.023 sec)