繁体   English   中英

如何在Oracle中对不同的逗号分隔值进行分组

[英]How to group distinct comma separated values in Oracle

我有main_mappings表,其数据如下:

mid  sid
1    1,2,3
1    2,4
3    1
4    2
4    5,9

我想得到这个:

mid  sids
1    1,2,3,4
3    1
4    2,5,9

我尝试了这个:

select mid, listagg(sid, ',') within group   (order by sid)
from main_mappings group by mid;

但这给了我:

1    1,2,3,2,4
3    1
4    2,5,9

有人可以帮忙吗?

您应该规范化表,以便每个值存储在不同的行中。 对于这种情况,您可以使用嵌套表为每个csv值生成行,找到不同的行,然后在其上进行listagg

select mid, listagg(sid, ',') within group(order by sid) sids
from (
select distinct m.mid, x.column_value sid
from main_mappings m,
table(
  cast (
    multiset(
      select regexp_substr(m.sid,'[^,]+',1,level)
      from dual
      connect by level <= regexp_count(m.sid,',') + 1
    )
  as sys.odcinumberlist)
)x )
group by mid;

您可以尝试以下解决方案。

SELECT listagg(ra,',')  WITHIN GROUP (ORDER BY ra)
FROM
(
SELECT DISTINCT (REGEXP_SUBSTR('02,02,02,02,02,03,04,03', '[^,]+', 1, LEVEL) )ra
        FROM DUAL
      CONNECT BY REGEXP_SUBSTR('02,02,02,02,02,03,04,03', '[^,]+', 1, LEVEL) IS NOT NULL
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM