Поворот и разбиение запросов для получения имен - PullRequest
0 голосов
/ 22 ноября 2018

Я попробовал вопрос 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.Так как же запрос по-прежнему возвращает другие имена по роду занятий?

...