Как объединить несколько строк записи в mySQL? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь объединить несколько строк, объединить и вывести как 1 строку. Вот мой пример и мой ожидаемый результат. Я попытался group_concat и поместил условие if / case в запрос, но кажется, что-то не может вывести, как я ожидал. Заранее спасибо.

Data:
id | Type   | Name       |Supermarket
1    Fruit    Apple       East
2    Fruit    Orange      West
3    Fruit    Pear        Central

Expected Output:
Type   |East    |West      |Central
Fruit   Apple    Orange     Pear

1 Ответ

2 голосов
/ 02 апреля 2020

Дублированные вопросы, которые я искал, не имели четких ответов ИМХО, поэтому я напишу один:

Сначала нам нужно распределить интересующие нас данные по 3 столбцам:

SELECT
  type,
  CASE WHEN supermarket = 'east' THEN name END as east,
  CASE WHEN supermarket = 'west' THEN name END as west,
  CASE WHEN supermarket = 'central' THEN name END as central
FROM t

Запустите его, и вы увидите, что данные разнесены на 3 строки и 3 столбца, в основном нулевые. Теперь нам нужно избавиться от нулей. Если мы будем использовать MAX () в каждом столбце с нулевыми значениями, мы будем скрывать все, кроме одной ячейки, у которой есть значение (max всегда будет выбирать значение больше нуля)

SELECT
  type,
  MAX(CASE WHEN supermarket = 'east' THEN name END) as east,
  MAX(CASE WHEN supermarket = 'west' THEN name END) as west,
  MAX(CASE WHEN supermarket = 'central' THEN name END) as central
FROM t
GROUP BY type
...