Coalesce нескольких значений
Имеется две таблицы dge
| id | name | ext_code |
|---|---|---|
| 1 | Автомобили | IAB11 |
| 2 | Автозапчасти | IAB12 |
и cr
| id | type | category |
|---|---|---|
| 1 | Видео-посты ОК | IAB11 |
| 2 | Видео-посты ОК | IAB11, IAB12 |
Мне необходимо заменить значения в таблице cr в поле category, на значения из справочника dge (поле name). Т.е. вместо category в cr подставить name из dge. Мой запрос работал , пока в поле category не стало приходить несколько значений , через запятую. Я не могу понять, как мне заменять значения, когда их несколько. Мой запрос не отрабатывает
Желаемый результат:
| id | type | category |
|---|---|---|
| 1 | Видео-посты ОК | Автомобили, Автозапчасти |
select cr.id,cr.type,COALESCE(dge.name, cr.category) AS category
from creative cr
LEFT JOIN dic_glossary_element dge ON dge.ext_code = cr.category
Ответы (1 шт):
Автор решения: Stefanov.sm
→ Ссылка
select cr.id, cr.type,
(
select string_agg("name", ', ')
from dic_glossary_element
where ext_code = any (string_to_array(cr.category, ', '))
) as category
from creative cr;
Вариант 2
select t.id, "type", string_agg("name", ', ') category
from
(
select id, "type",
unnest(string_to_array(category, ', ')) ext_code
from creative
) as t
join dic_glossary_element using (ext_code)
group by 1, 2;