Oracle 10g: парсинг двух столбцов, объединение дубликатов

У меня есть таблица с 3 столбцами:DATE_A, DATE_B а также ISSUEDATE_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_MISSUE, Пример ниже показывает принцип.

пример

Источник

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;
Другие вопросы по тегам