连接逗号分隔的列值是删除重复项

时间:2014-03-27 02:24:57

标签: sql oracle oracle11g

我需要连接存储在oracle表中的逗号分隔列值。当我连接列值时,我还需要删除重复的值。我是oracle的新手,不知道从哪里开始。有人可以帮我在oracle 11g中实现以下功能吗?

Table:
rec_id     affiliations
1          P,QE,D
2          EE,ED-D
1          QE,PO-D, D 
2          A,EE

Desired output:
rec_id    affiliations
1         P,QE,D,PO-D
2         EE,ED-D,A,EE

1 个答案:

答案 0 :(得分:2)

此查询的第一部分将输入解析为每个联盟的单独行;最终的选择将它们连接成每个rec_id的单个列表。

with parsed as (
  select distinct
         rec_id
        ,ltrim(regexp_substr(','||affiliations,',([^,])+',1,i), ',') k
  from t, (select rownum i from dual connect by level <= 100)
  where regexp_substr(','||affiliations,',([^,])+',1,i) is not null)
select distinct
       rec_id
      ,listagg(k, ',') within group (order by k) over (partition by rec_id) affiliations
from parsed
order by rec_id;

将数字(例如100)调整为您希望在输入中看到的最大项目数。

http://sqlfiddle.com/#!4/37b44/4

相关问题