首页 > 解决方案 > 如何将字符串拆分为行?

问题描述

我有以下查询。我需要从表中提取每个订单号(唯一标识符)的参考。我最终会有类似的东西:

Order ID    Ref
A           Xz|Yz

但我想拥有:

Order ID    Ref
A           Xz
A           Yz

问题是每个订单 ID,我可以或多或少地连接引用,但它们总是用'|'.

我需要以某种方式使用 Select 语句(以上面建议的格式读取 Tableau 中的数据)。

有人对如何实现这一目标有任何想法吗?

标签: sqloracleoracle11g

解决方案


在 Oracle 中,您可以使用带有CONNECT BYand的递归查询REGEXP_SUBSTR

SELECT order_id, TRIM(REGEXP_SUBSTR(ref, '[^|]+', 1, level)) ref
FROM t
CONNECT BY instr(ref, '|', 1, level - 1) > 0
ORDER BY order_id, ref

DB Fiddle 上的演示

WITH t AS (
    SELECT 'A' order_id, 'Xz|Yz' ref FROM DUAL
)
SELECT order_id, trim(regexp_substr(ref, '[^|]+', 1, level)) ref
FROM t
CONNECT BY instr(ref, '|', 1, level - 1) > 0
order by order_id, ref
ORDER_ID | 参考
:------- | :--
一个 | Xz
一个 | YZ

推荐阅读