SQL — Группировать по идентификатору и преобразовывать строки в столбцы

#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:

Демонстрация SQL Fiddle

 SELECT *
FROM MyTable
PIVOT(MAX(Cat) FOR Cat IN (Small,Medium,Large) ) p