Я застрял на использовании PIVOT
в простом примере (который я полностью приведу ниже). Полное раскрытие, я получил это от https://www.hackerrank.com/. Я выбрал его именно потому, что хочу поближе познакомиться с PIVOT
, и это выглядело как простой пример! Я просмотрел многочисленные посты на эту тему и использовал это для того, чтобы вымолвить: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b76a4668-d0c3-4c51-8d86-117d5c181e69/pivot-without-aggregate-function?forum=transactsql, но, похоже, не смог сделать все правильно. Вот таблица:
TABLE OCCUPATIONS
Name Occupation
Samantha Doctor
Julia Actor
Maria Actor
Meera Singer
Ashley Professor
Ketty Professor
Christeen Professor
Jane Actor
Jenny Doctor
Priya Singer
Задача состоит в том, чтобы получить выходные данные с колонками Доктор, Профессор, Певец или Актер (в таком порядке). Если у вас заканчиваются данные для одного или нескольких столбцов, введите NULL
. Вот ожидаемый результат (скопированный непосредственно с сайта).
Jenny Ashley Meera Jane
Samantha Christeen Priya Julia
NULL Ketty NULL Maria
В качестве отступления, похоже, они хотят получить результаты без заголовков столбцов (я не уверен!).
Вот последняя итерация того, что я пробовал:
SELECT [Doctor], [Professor],[Singer], [Actor]
FROM
(SELECT [Name], [Occupation] from OCCUPATIONS) as pvtsource
PIVOT
( MAX([Name]) FOR [Occupation] IN ([Doctor], [Professor],[Singer], [Actor]) ) AS p
и это дает:
Doctor Professor Singer Actor
Samantha Ketty Priya Maria
Меня не удивляет этот неверный результат. В конце концов, я сказал в своем запросе MAX
. Я предполагаю, что он просто выбирает имя MAX
для каждой профессии в алфавитном порядке. Мария - более крупный актер, чем Джулия или Джейн, например, если вы основали ее на алфавите. Но когда я удаляю MAX
, я получаю сообщение об ошибке («Неверный синтаксис ...»). Как это сделать?
Спасибо! Бонусные вопросы 1. Хорошие, нежные, статьи на PIVOT
? Я ясно не получил это через мою толстую голову. В конце концов, я хочу делать более сложные пивоты, где я SUM
или беру MAX
. 2. Как отобразить результаты без заголовков столбцов? 3. Мне также было бы интересно узнать, как это сделать без PIVOT
, если есть простой способ.