Как сделать значение названием колонки

У меня есть таблица:

market | region | open_time
 pyat      msk       09:00
 pyat      kiev      10:00
 mag       msk       22:00
...

и нужно получить следующее

market | msk | kiev
 pyat   09:00  10:00
 mag    22:00   null

Основная проблема заключается в том, что при SELECT open_time as region он присваивает названию колонки слово region а не само значение (название региона )


Ответы (2 шт):

Автор решения: 0xdb

Попробуйте с PIVOT клаузой (см. pivot_clause):

with t ("market", "region", "open_time") as (
    select 'pyat', 'msk',  '09:00' from dual union all
    select 'pyat', 'kiev', '10:00' from dual union all
    select 'mag',  'msk',  '22:00' from dual)
-- отсюда начинается сам запрос, выше тестовые данные    
select * 
from t
pivot (max ("open_time") for "region" in ('msk' as "msk", 'kiev' as "kiev"))
/

Результат:

mark msk   kiev 
---- ----- -----
pyat 09:00 10:00
mag  22:00 null 

→ Ссылка
Автор решения: 0xdb

На любом брэнде БД должен работать такой запрос:

select 
    market as "market", 
    max(case region when 'msk'  then open_time end) as "msk",
    max(case region when 'kiev' then open_time end) as "kiev"
from t
group by market 
order by market desc 

Проверить можно на db<>fiddle. Для SQLite дало такой результат:

market  msk     kiev
------  -----   -----
pyat    09:00   10:00
mag     22:00   null
→ Ссылка