Oracle 10g: синтаксический анализ 2 столбцов, объединение дубликатов - PullRequest
0 голосов
/ 27 августа 2018

У меня есть таблица с 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 Ответ

0 голосов
/ 27 августа 2018

Если я правильно понимаю, вы хотите 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...