根據特殊識別符號,將一行轉多行記錄

pwz1688發表於2015-07-31
表中記錄如下:
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章