select t1.c1,
substr(t1.c2,
instr(',' || t1.c2, ',', 1, t2.rn),
instr(t1.c2 || ',', ',', 1, t2.rn) -
instr(',' || t1.c2, ',', 1, t2.rn)) c2
from tab t1, (select rownum rn from dual connect by rownum <= 20) t2
where length(t1.c2) - length(replace(t1.c2, ',')) + 1 >= t2.rn
order by t1.c1, t2.rn构造的t2里面,rownum<=后面的数字,可以适当调整,要大于c2中元素的个数
substr(t1.c2,
instr(',' || t1.c2, ',', 1, t2.rn),
instr(t1.c2 || ',', ',', 1, t2.rn) -
instr(',' || t1.c2, ',', 1, t2.rn)) c2
from tab t1, (select rownum rn from dual connect by rownum <= 20) t2
where length(t1.c2) - length(replace(t1.c2, ',')) + 1 >= t2.rn
order by t1.c1, t2.rn构造的t2里面,rownum<=后面的数字,可以适当调整,要大于c2中元素的个数
版主,问下length(t1.c2) - length(replace(t1.c2, ',')) + 1 >= t2.rn这句是如何筛选取得想要的结果的
版主,问下length(t1.c2) - length(replace(t1.c2, ',')) + 1 >= t2.rn这句是如何筛选取得想要的结果的
这里是通过计算c2中逗号的个数,来选择连接t2中对应的rn
版主,问下length(t1.c2) - length(replace(t1.c2, ',')) + 1 >= t2.rn这句是如何筛选取得想要的结果的
这里是通过计算c2中逗号的个数,来选择连接t2中对应的rn恩,这个我知道,我想不通的是前面一段是计算出逗号的长度,然后>=t2.rn,这样的写法是如何
将所有非空的结果集保留下来,而排除为空的结果的,麻烦版主了
对应t1每一条记录的c2,有几个项,就扩展出几条来,所以利用t2来实现
你把t1.c2和t2.rn也在结果集里展现就知道了