#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть набор данных, подобный следующему:
ID Cat
1 Large
1 Small
1 Medium
2 Small
2 Medium
3 Large
Я хочу преобразовать его в это:
ID Small Medium Large
1 Small Medium Large
2 Small Medium NULL
3 NULL NULL Large
Я пробовал несколько разных подходов, но они, похоже, не работают
Спасибо за вашу помощь
Комментарии:
1. Я пробовал несколько разных подходов, но, похоже, они не работают , вы должны включить свои попытки в свой вопрос. Это может быть небольшая проблема с синтаксисом, которая мешает вам получить конечный результат.
2. итак, что в этом большого?
3. Вы хотите, чтобы слово «большой» было изменено на «Большой» как часть этого?
4. @xQbert да, извините, должно быть большим
5. Ваше обновление не может соответствовать тому, что дает мой ответ, поскольку ваш результат не группируется по
ID
Ответ №1:
Это странный желаемый результат, но, увы:
SELECT ID,
MIN(CASE WHEN Cat = 'Small' THEN 'Small' END) Small,
MIN(CASE WHEN Cat = 'Medium' THEN 'Medium' END) Medium,
MIN(CASE WHEN Cat = 'Large' THEN 'Large' END) Large
FROM YourTable
GROUP BY ID
Комментарии:
1. спасибо за ваш ответ, но это не совсем работает, я обновлю вопрос и покажу вам, что он дает
2. @neeko Очевидно, что вы не предоставляете все детали, это дает то, что вы хотите — смотрите эту демонстрацию — sqlfiddle.com /#!3/7dd03/1
3. @bluefeet Ну, оп обновил свой вопрос, но результаты не имеют смысла
Ответ №2:
SELECT *
FROM MyTable
PIVOT(MAX(Cat) FOR Cat IN (Small,Medium,Large) ) p