Дублированные вопросы, которые я искал, не имели четких ответов ИМХО, поэтому я напишу один:
Сначала нам нужно распределить интересующие нас данные по 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