我有一个包含3列的表格:
DATE_A
,DATE_B
和ISSUE
DATE_A
和DATE_B
可以通过3种可能的方式填充:
要么都有一个值,要么只有一个有值,如下所示:
DATE_A | DATE_B | ISSUE
----------+-----------+-----------
20130301 | 20140101 | bla
20150801 | null | foo
null | 20180701 | bar
我需要分析该表以填充新表,同时DATE_A和DATE_B都填充单个列DATE_M
。
如果要插入{{1}的DATE_A
(或DATE_B
)值已经存在于DATE_M
中,则必须在源DATE_M
后面附加现有的{{1 }} ISSUE
。下面的示例说明了原理。
示例
源
DATE_M
目的地
ISSUE
问题
是否可以编写一个执行此操作的查询,还是应该编写一个存储过程?如果一个查询可以,那会是什么?
答案 0 :(得分:2)
如果我的理解正确,那么您需要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;