繁体   English   中英

行在oracle sql中转换

[英]rows convert in oracle sql

我的价值观如下

1,a,b,c
2,d,e
3,f,g

预期产量

1 a
1 b
1 c
2 d
2 e                 

你能帮我么?

它非常接近实现在表中拆分以逗号分隔的字符串的逻辑。 唯一棘手的事情是您拥有行号以及字符串本身。

您可以将ROWNUM用作伪列,然后过滤掉那些字符串的前导substr与ROWNUM重复的行。

例如,

设定

SQL> CREATE TABLE t(text VARCHAR2(4000));

Table created.

SQL>
SQL> INSERT INTO t SELECT '1,a,b,c' text FROM dual;

1 row created.

SQL> INSERT INTO t SELECT '2,d,e' text FROM dual;

1 row created.

SQL> INSERT INTO t SELECT '3,f,g' text FROM dual;

1 row created.

SQL> COMMIT;

Commit complete.

SQL>
SQL> SELECT * FROM t;

TEXT
----------
1,a,b,c
2,d,e
3,f,g

SQL>

解:

SQL> WITH DATA AS(
  2  SELECT ROWNUM rn, text FROM t
  3  )
  4  SELECT *
  5  FROM
  6    (SELECT rn,
  7      trim(regexp_substr(t.text, '[^,]+', 1, lines.COLUMN_VALUE)) text
  8    FROM DATA t,
  9      TABLE (CAST (MULTISET
 10      (SELECT LEVEL FROM dual CONNECT BY LEVEL <= regexp_count(t.text, ',')+1
 11      ) AS sys.odciNumberList ) ) lines
 12    )
 13  WHERE TO_CHAR(rn) <> text
 14  ORDER BY rn
 15  /

        RN TEXT
---------- ----------
         1 a
         1 b
         1 c
         2 d
         2 e
         3 f
         3 g

7 rows selected.

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM