17,377
社区成员
发帖
与我相关
我的任务
分享
你这个想一个sql简单实现好像很困难啊!
因为你这个要先行转列,去重,然后再列转行啊
1.行转列
这是一个行转列例子,替换成你的表和字段
select a,b,c from
(with test as (select 'aaa' a,'bbb' b,'1,2,3' c from dual)
select a,b,substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select a,b,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt FROM test) t,
(select LEVEL lv from dual CONNECT BY LEVEL <= 100) c where c.lv <= t.cnt )
2.去重
去重就不说了,方法很多,distinct之类的就行
在上面取出的结果集外面用select distinct检索一下就可以了
3.列转行
用wm_concat函数直接转就行了
对于上面的结果集用下面的sql在字查询一下就可以了
select hm, wm_concat(a1),wm_concat(b1),wm_concat(c1) from table group by hm