根据特殊标识符,将一行转多行记录

表中记录如下:
select * from t;

N A
-- ----------
1 a,b
2 a,d,f
希望根据a列中的逗号,将表中记录折分为多行,输出结果如下:
N A
-- --
1 a
1 b
2 a
2 d
2 f

实现方法如下所示:

点击(此处)折叠或打开

  1. SQL> with t as
  2.   2 (select 1 n, 'a,b,aaa' a
  3.   3 from dual
  4.   4 union all
  5.   5 select 2, 'aa,dc,f'
  6.   6 from dual
  7.   7 union all
  8.   8 select 3, 'aa,a,a,a'
  9.   9 from dual
  10.  10 union all
  11.  11 select 6, 'aaaa,ttttttt,55555'
  12.  12 from dual)
  13.  13 select distinct level, n, regexp_substr(a, '[^,]+', 1, le
  14.  14 from t
  15.  15 connect by level <= regexp_count(a, ',') + 1
  16.  16 AND n = PRIOR n
  17.  17 AND PRIOR SYS_GUID() IS NOT NULL
  18.  18 order by n, level;

  19.      LEVEL N REGEXP_SUBSTR(A,'[^,]+',1,LEVEL)
  20. ---------- ---------- ------------------------------------
  21.          1 1 a
  22.          2 1 b
  23.          3 1 aaa
  24.          1 2 aa
  25.          2 2 dc
  26.          3 2 f
  27.          1 3 aa
  28.          2 3 a
  29.          3 3 a
  30.          4 3 a
  31.          1 6 aaaa

  32.      LEVEL N REGEXP_SUBSTR(A,'[^,]+',1,LEVEL)
  33. ---------- ---------- ------------------------------------
  34.          2 6 ttttttt
  35.          3 6 55555

  36. 已选择13行。

  37. SQL>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21251711/viewspace-1757788/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21251711/viewspace-1757788/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值