2015-01-21 94 views
-4

我有值的表:拆分分隔行與列在SQL

表1:表1 ID Hirerachy 1:A:B:C 2:P:Q:R:S:T 3 :M:N

如何可以將其切如下:

表1:表2 ID COL1 COL2 COL3 COL4 COL5 COL6 COL7 1 CBAN/AN/AN/AN/A 2 TSRQPN/AN/A 3 NMN/AN/AN/AN/AN/A

該行包含分隔列更改。

請幫助我通過使用遊標在SQL/PLSQL中提供完整的解決方案。

+0

下面是關於執行光標教程:http://www.tutorialspoint.com/plsql/plsql_cursors.htm – 2015-01-21 06:05:39

回答

0

我自己回答它,我成功地找到了解決方案:

SELECT table1.id, CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 0 THEN REGEXP_SUBSTR(層次結構,' [^:] +」,1,REGEXP_COUNT(b.Hirerachy, ':')) ELSE 'N/A' END 「COL1」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':') > 1 THEN regexp_substr(Hierarchy,'[^:] +',1,REGEXP_COUNT(b.Hirerachy,':') - 1) ELSE'N/A' END 「COL2」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 2 THEN REGEXP_SUBSTR(層次, '[^:] +',1,REGEXP_COUNT(b.Hirerachy, ':' )-2) ELSE 'N/A' END 「COL3」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 3 THEN REGEXP_SUBSTR(層次, '[^:] +', 1,REGEXP_COUNT(b.Hirerachy, ':') - 3) ELSE 'N/A' END 「COL4」,

CASE WHEN REGEXP_COUNT(b。 (4) ELSE'N/A' END「col5」,'''''')> 4 THEN regexp_substr(Hierarchy,'[^:] +',1,REGEXP_COUNT(b.Hirerachy,':')

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 5 THEN REGEXP_SUBSTR(層次, '[^:] +',1,REGEXP_COUNT(b.Hirerachy, ':') - 5) ELSE 'N/A' END 「COL6」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 6 THEN REGEXP_SUBSTR(層次, '[^:] +',1,REGEXP_COUNT(b。 Hirerachy,':') - 6) ELSE'N/A' E ND 「COL7」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 7 THEN REGEXP_SUBSTR(層次, '[^:] +',1,REGEXP_COUNT(b.Hirerachy, ':') -7) ELSE 'N/A' END 「col8」,

CASE WHEN REGEXP_COUNT(b。('H:'''') - 8) ELSE'N/A' END「col9」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 9 THEN REGEXP_SUBSTR(層次, '[^:] +',1,REGEXP_COUNT(b.Hirerachy, ':') - 9) ELSE 'N/A' END 「col10」,

CASE WHEN REGEXP_COUNT(b.Hirerachy, ':')> 10 THEN REGEXP_SUBSTR(層次, '[^:] +',1,REGEXP_COUNT(b。 Hirerachy,':') - 10) ELSE'N/A' END 「col11」

FROM表1