Oracle 10g:解析合并重复项的2列

2024-01-05

我有一个包含 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(使用前将#替换为@)

Oracle 10g:解析合并重复项的2列 的相关文章

随机推荐