我有一个包含 3 列的表:DATE_A
, DATE_B
and ISSUE
DATE_A
and DATE_B
可以通过 3 种可能的方式填写:
要么两者都有一个值,要么只有一个有,如下所示:
DATE_A | DATE_B | ISSUE
----------+-----------+-----------
20130301 | 20140101 | bla
20150801 | null | foo
null | 20180701 | bar
我需要解析此表以填充新表,其中 DATE_A 和 DATE_B 填充单个列DATE_M
。
如果DATE_A
(or DATE_B
) 要插入的值DATE_M
已经存在于DATE_M
,那么源ISSUE
必须附加现有的DATE_M
ISSUE
。下面的例子说明了原理。
Example
Source
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
Question
是否可以编写一个查询来执行此操作,或者应该编写一个存储过程?如果单个查询可以,它会是什么?
如果我理解正确的话,你想要一个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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)