oracle - oracle中的多列行拆分
问题描述
我将单个字符串行拆分为行
例如,
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 中做到这一点?
解决方案
您可以按如下方式使用层次结构查询:
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>
推荐阅读
- html - 我创建了一个表格,但它不是水平滚动
- javascript - 从排序数组 JS 中删除重复项
- amazon-dynamodb - DynamoDB docClient 扫描没有响应
- css - 如何仅使用 css 设置挤压框的样式
- prestashop - 如何在 Prestashop 1.7 中跳过付款步骤
- sql-server - 将 SQL Server 函数迁移到 PostgreSQL
- tinymce - TinyMCE 5:插入时总是向块引用元素添加一个类(通过单击工具栏上的“块引用”按钮)
- javascript - 如何禁用图像拖动
- python - 去元组替代
- javascript - 为什么我收到此 Paypal 创建订单错误?