我有一个包含以下列和字符串的Oracle表:
| Name | Id | Path |
|---------+----------+-----------|
| Base1 | B1 | /B1 |
| Mid1 | M1 | /B1/M1 |
| Top1 | T1 | /B1/M2/T1 |
| Mid2 | M2 | /B1/M2 |
| Top2 | T2 | /B2/M1/T2 |
| Top3 | T3 | /B2/M1/T3 |
| Base2 | B2 | /B2 |
我需要用名称而不是ID来显示路径。
Base1
Base1/Mid2
Base1/Mid2/Top1
Base1/Mid2
Base2/Mid1/Top2
Base2/Mid1/Top3
Base2
我可以用regexp_substr(path, '[^/]+', 1, 1)
获取并连接各个子字符串,并使用REPLACE(regexp_substr(path, '[^/]+', 1, 1),id,name)
替换整个字符串中的相应子字符串,但是如何获取在同一行上没有相应Id的子字符串的名称呢?
2条答案
按热度按时间ebdffaop1#
你有分层数据;如果你将路径返回到层次结构的前一级(通过找到路径的前一级),然后你可以使用层次结构查询来重建路径,那么解决这个问题就容易得多:
或:
其中,对于示例数据:
/B2
、/B2/M1/
和/B2/M1/T2
,而不是在路径中途随机地从B1
更改为B2
。*两个输出:
| 姓名|识别号|路径|名称路径|
| - ------|- ------|- ------|- ------|
| 碱基1|地下一层|/B1|/基线1|
| 中期2|M2|/B1/M2|/底座1/中间2|
| 前1名|T1|/B1/M2/T1|/基本1/中间2/顶部1|
| 碱基2|B2|/B2|/基数2|
| 中期1|M1|/B2/M1|/基础2/中间1|
| 前2名|T2|/B2/M1/T2|/基本2/中间1/顶部2|
| 前三名|T3|/B2/M1/T3|/基本2/中间1/前3|
fiddle
qlvxas9a2#
备选办法之一可以是:
其中包含您的样本数据:
...结果:
另一个选项是使用MODEL,如下所示:
增加(补充方案)