oracle将一行数据拆分成多行,Oracle 一行拆分为多行

SQL> col single_element for a15

SQL>

SQL> with ilv as

2   (select str as orig_str,

3           ‘,‘ || str || ‘,‘ as mod_str,

4           1 as start_pos,

5           length(str) as end_pos,

6           (length(str) - length(replace(str, ‘,‘))) + 1 as element_count,

7           0 as element_no,

8           rownum as rn

9      from t)

10  select orig_str as original_string,

11         substr(mod_str, start_pos, end_pos - start_pos) as single_element,

12         element_no,

13         element_count

14    from (select *

15            from ilv

16           model partition by(rn, orig_str, mod_str)

17                 dimension by(element_no)

18                 measures(start_pos, end_pos, element_count)

19                 rules iterate(2000)

20                    until(iteration_number + 1 = element_count[0])(

21                        start_pos[iteration_number + 1] = instr(cv(mod_str), ‘,‘, 1, cv(element_no)) + 1,

22                        end_pos[iteration_number + 1] = instr(cv(mod_str), ‘,‘, 1, cv(element_no) + 1)

23                    )

24          )

25   where element_no != 0

26   order by mod_str, element_no;

ORIGINAL_STRING                SINGLE_ELEMENT  ELEMENT_NO ELEMENT_COUNT

------------------------------ --------------- ---------- -------------

X,Y,Z                          X                        1

X,Y,Z                          Y                        2

X,Y,Z                          Z                        3

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG XXX                      1

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG Y                        2

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG ZZ                       3

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG AAAAA                    4

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG B                        5

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG CCC                      6

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG D                        7

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG E                        8

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG F                        9

XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG GGG                     10

13 rows selected

SQL>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值