Я попробовал вопрос HackerRank ниже, где Имена должны поворачиваться на Занятиях.
https://www.hackerrank.com/challenges/occupations/problem
Я нашел решение, но не понимаю, как оно работает конкретно, почемудругие имена возвращаются в результате при получении максимального значения для имен.
Таблица:
CREATE TABLE Occupations
(
Name varchar(25),
Occupation varchar(1000)
)
INSERT INTO Occupations VALUES('Samantha', 'Doctor')
GO
INSERT INTO Occupations VALUES('Julia', 'Actor')
GO
INSERT INTO Occupations VALUES('Maria', 'Actor')
GO
INSERT INTO Occupations VALUES('Meera', 'Singer')
GO
INSERT INTO Occupations VALUES('Ashley', 'Professor')
GO
INSERT INTO Occupations VALUES('Ketty', 'Professor')
GO
INSERT INTO Occupations VALUES('Christeen', 'Singer')
GO
INSERT INTO Occupations VALUES('Jane', 'Actor')
GO
INSERT INTO Occupations VALUES('Jenny', 'Doctor')
GO
INSERT INTO Occupations VALUES('Priya', 'Singer')
GO
Решение:
SELECT [Doctor], [Professor], [Singer],[Actor]
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name ASC) AS RowNumber, *
FROM Occupations) as tempTable
PIVOT
(
MAX(Name) FOR OCCUPATION IN ([Doctor], [Professor], [Singer], [Actor])
) AS pivotTable
Так, как я понимаю этоВыполнение запроса состоит в том, что строки разбиваются по классу Occupation, упорядоченному по имени, а затем максимальные имена поворачиваются в Occupations.Так как же запрос по-прежнему возвращает другие имена по роду занятий?