SQL. Объединение результатов SELECT в одну строку, требуется замена полученных результатов на человекочитаемые
Есть таблица: tab1 (id, arg1,arg2) где arg1 - идентификатор сервиса, arg2 - цифровой код, возможные значения: 1,2,3 у сервиса может быть несколько кодов, сочетание arg1,arg2 в таблице не может повторятся.
Нужно вывести в результате запроса SELECT в одну строку все цифровые коды, которые соответствуют данному идентификатору сервиса. Но проблема в том, что в строке должны быть не коды, а ресурсы, которые соответствуют этим кодам, например 1 - сайт, 2- электронная почта, 3 - телефон
SELECT
ARRAY_TO_STRING(ARRAY(
case
when (select arg2 from tab1 where arg1=111)=1 then 'сайт'
when (select arg2 from tab1 where arg1=111)=2 then 'электронная почта'
when (select arg2 from tab1 where arg1=111)=3 then 'телефон'
end),',')
from tab1 where arg1=111
такое у меня не сработало
ожидаемый результат: 111;сайт, электронная почта
Ответы (2 шт):
Автор решения: Герман Борисов
→ Ссылка
SELECT
arg1,
string_agg(
case
when arg2=1 then 'сайт'
when arg2=2 then 'электронная почта'
when arg2=3 then 'телефон'
end,',')
from tab1 where arg1=111
group by arg1
Агрегатная функция string_agg появилась в версии 9.0. Если нужно для более ранней версии, укажите в вопросе
Автор решения: Akina
→ Ссылка
SELECT arg1, STRING_AGG( CASE arg2 WHEN 1 THEN 'сайт'
WHEN 2 THEN 'электронная почта'
WHEN 3 THEN 'телефон'
END, ',' ) arg2_list
FROM tab1
GROUP by arg1