Roh*_*han 5 sql database sql-server
请帮我解决这个问题:给你一个表,包含两列:列是以下之一:
Doctor
Professor
Singer
Actor
Run Code Online (Sandbox Code Playgroud)
编写查询以输出相应occ下面的名称.采用以下格式:
+--------+-----------+--------+------+
| Doctor | Professor | Singer | Actor|
+--------+-----------+--------+------+
Run Code Online (Sandbox Code Playgroud)
名称必须按字母顺序排列.
样本输入
Name Occupation
Meera Singer
Ashely Professor
Ketty Professor
Christeen Professor
Jane Actor
Jenny Doctor
Priya Singer
Run Code Online (Sandbox Code Playgroud)
样本输出
Jenny Ashley Meera Jane
Samantha Christeen Priya Julia
NULL Ketty NULL Maria
Run Code Online (Sandbox Code Playgroud)
注意
当没有更多名称对应于职业时,打印"NULL".
我试过用:
SELECT *
FROM
(
SELECT [Name], [Occupation]
FROM occupations
) AS source
PIVOT
(
max([Name])
FOR [occupation] IN ([Doctor], [Professor], [Singer], [Actor])
) as pvt;
Run Code Online (Sandbox Code Playgroud)
它给出了以下输出:
Priya Priyanka Kristeen Samantha
Run Code Online (Sandbox Code Playgroud)
怎么解决?
Jam*_*D77 14
您只需要根据字体的职业和顺序为每个名称添加一个行号.然后在您的数据透视查询中包含该行号.
CREATE TABLE Occupations (
NAME VARCHAR(MAX),
Occupation VARCHAR(MAX)
)
INSERT INTO Occupations
VALUES
('Samantha','Doctor'),
('Julia','Actor'),
('Maria','Actor'),
('Meera','Singer'),
('Ashley','Professor'),
('Ketty','Professor'),
('Christeen','Professor'),
('Jane','Actor'),
('Jenny','Doctor'),
('Priya','Singer');
SELECT
[Doctor],
[Professor],
[Singer],
[Actor]
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) rn,
[Name],
[Occupation]
FROM
Occupations
) AS source
PIVOT
( MAX([Name]) FOR [occupation] IN ([Doctor],[Professor],[Singer],[Actor]) ) as pvt
ORDER BY rn
DROP TABLE Occupations
Run Code Online (Sandbox Code Playgroud)
小智 6
我在Oracle 中尝试过,似乎更容易理解:
SELECT min(Doctor), min(Professor), min(Singer), min(Actor)
FROM
( Select
ROW_NUMBER() OVER (PARTITION BY Occupation order by Name) rn,
CASE
WHEN Occupation = 'Doctor' then Name
end as Doctor,
CASE
WHEN Occupation = 'Professor' then Name
end as Professor,
CASE
WHEN Occupation = 'Singer' then Name
end as Singer,
CASE
WHEN Occupation = 'Actor' then Name
end as Actor
from OCCUPATIONS
order by Name) a
group by rn
order by rn;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8659 次 |
| 最近记录: |