输入数据:
职业 | 姓名 |
---|---|
医生 | 史密斯 |
医生 | 乔治 |
教授 | 贝克 |
歌手 | 戴维斯 |
歌手 | 头 |
演员 | 米勒 |
查询:
SELECT [Doctor], [Professor], [Singer], [Actor]
FROM (
SELECT Occupation, Name,
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) AS rn
FROM OCCUPATIONS
) AS SourceTable
PIVOT
(
MAX(Name) FOR Occupation IN ([Doctor], [Professor], [Singer], [Actor])
) AS PivotTable
ORDER BY rn;
结果
医生 | 教授 | 歌手 | 演员 |
---|---|---|---|
乔治 | 贝克 | 戴维斯 | 米勒 |
史密斯 | 空 | 头 | 空 |
我的问题是,如果像 max 这样使用聚合函数,我如何获得职业的多个值?
我尝试删除行号并搜索行号是否在其中发挥任何作用 而且我还是不确定
使用
ROW_NUMBER
您可以定义结果集的顺序。
当然,您可以通过更改 row_number 窗口函数中的顺序来实现这一点
CREATE TABLE OCCUPATIONS (
"Occupation" VARCHAR(9),
"Name" VARCHAR(6)
);
INSERT INTO OCCUPATIONS
("Occupation", "Name")
VALUES
('Doctor', 'Smith'),
('Doctor', 'George'),
('Professor', 'Baker'),
('Singer', 'Davis'),
('Singer', 'Head'),
('Actor', 'Miller');
6 rows affected
SELECT [Doctor], [Professor], [Singer], [Actor]
FROM (
SELECT Occupation, Name,
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) AS rn
FROM OCCUPATIONS
) AS SourceTable
PIVOT
(
MAX(Name) FOR Occupation IN ([Doctor], [Professor], [Singer], [Actor])
) AS PivotTable
ORDER BY rn;
医生 | 教授 | 歌手 | 演员 |
---|---|---|---|
乔治 | 贝克 | 戴维斯 | 米勒 |
史密斯 | 空 | 头 | 空 |
SELECT [Doctor], [Professor], [Singer], [Actor]
FROM (
SELECT Occupation, Name,
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) AS rn
FROM OCCUPATIONS
) AS SourceTable
PIVOT
(
MAX(Name) FOR Occupation IN ([Doctor], [Professor], [Singer], [Actor])
) AS PivotTable
ORDER BY rn DESC;
医生 | 教授 | 歌手 | 演员 |
---|---|---|---|
史密斯 | 空 | 头 | 空 |
乔治 | 贝克 | 戴维斯 | 米勒 |