SQL 透视列说明

问题描述 投票:0回答:1

输入数据:

职业 姓名
医生 史密斯
医生 乔治
教授 贝克
歌手 戴维斯
歌手
演员 米勒

查询:

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 这样使用聚合函数,我如何获得职业的多个值?

我尝试删除行号并搜索行号是否在其中发挥任何作用 而且我还是不确定

sql pivot aggregate-functions
1个回答
0
投票

使用

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;
医生 教授 歌手 演员
史密斯
乔治 贝克 戴维斯 米勒

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.