Oracle 10g: парсинг двух столбцов, объединение дубликатов
У меня есть таблица с 3 столбцами:DATE_A
, DATE_B
а также ISSUE
DATE_A
а также DATE_B
может быть заполнено тремя возможными способами: либо оба имеют значение, либо только одно, как показано здесь:
DATE_A | DATE_B | ISSUE
----------+-----------+-----------
20130301 | 20140101 | bla
20150801 | null | foo
null | 20180701 | bar
Мне нужно проанализировать эту таблицу, чтобы заполнить новую таблицу, причем DATE_A и DATE_B заполняют оба столбца DATE_M
, Если DATE_A
(или же DATE_B
) значение для вставки в DATE_M
уже существует в DATE_M
тогда источник ISSUE
должен быть дополнен существующим DATE_M
ISSUE
, Пример ниже показывает принцип.
пример
Источник
DATE_A | DATE_B | ISSUE
----------+-----------+-----------
20130301 | 20140101 | bla1
20150801 | null | foo1
null | 20180701 | bar
20130301 | 20150101 | bla2
20150801 | null | foo2
Место назначения
DATE_M | ISSUE
----------+-----------
20130301 | bla1; bla2
20140101 | bla1
20150801 | foo1; foo2
20150101 | bla2
20180701 | bar
Вопрос
Можно ли написать запрос, выполнив это, или следует написать хранимую процедуру? Если один запрос может, что это может быть?
1 ответ
Если я правильно понимаю, вы хотите union all
значений даты и агрегации строк. listagg()
был введен в 11g, но вы можете использовать wm_concat()
:
select dte, wm_concat(issue) as issues
from ((select date_a as dte, issue from t where date_a is not null) union all
(select date_b, issue from t where date_b is not null)
) di
group by dte
order by dte;