строка из нескольких столбцов разбита на oracle - PullRequest
0 голосов
/ 27 мая 2020

У меня есть однострочная строка, разделенная на строки

Например,

A,B,C,D,E

на

A
B
C
D
E

, но я бы хотел несколько столбцов ' одинарный ряд

| A,B,C | H,I,J,K,L | Q,R,X,Y,Z |

в

A | H | Q
B | I | R
C | J | X
  | K | Y
  | L |

Как это сделать в oracle?

1 Ответ

2 голосов
/ 27 мая 2020

Вы можете использовать поисковый запрос следующим образом:

SQL> WITH DATAA ( D ) AS (
  2      SELECT '| A,B,C | H,I,J,K,L | Q,R,X,Y,Z |'
  3      FROM DUAL
  4  )
  5  -- your query starts from here
  6  SELECT TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(D.D, '[^|]+', 1, 1), '[^,]+', 1, LEVEL)) AS COL1,
  7         TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(D.D, '[^|]+', 1, 2), '[^,]+', 1, LEVEL)) AS COL2,
  8         TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(D.D, '[^|]+', 1, 3), '[^,]+', 1, LEVEL)) AS COL3
  9    FROM DATAA D
 10  CONNECT BY LEVEL <= (
 11          SELECT MAX(REGEXP_COUNT((REGEXP_SUBSTR(D.D, '[^|]+', 1, COLUMN_VALUE)), ',')) + 1
 12            FROM DATAA D
 13              CROSS JOIN TABLE ( CAST(MULTISET(
 14                  SELECT LEVEL LVL
 15                    FROM DUAL
 16                  CONNECT BY LEVEL <= REGEXP_COUNT(D.D, '[^|]+')
 17              ) AS SYS.ODCIVARCHAR2LIST) ) LVLS
 18      );

COL1    COL2        COL3
------- ----------- -----------
A       H           Q
B       I           R
C       J           X
        K           Y
        L           Z

SQL>
...