在 SQL 中将分隔的行拆分为列

Posted

技术标签:

【中文标题】在 SQL 中将分隔的行拆分为列【英文标题】:Split delimited row to column in SQL 【发布时间】:2015-01-21 06:01:39 【问题描述】:

我有一个包含值的表:

表 1:表 1 id层次结构 1 :A:B:C 2:P:Q:R:S:T 3 :M:N

我们如何将其拆分如下:

表 1:表 2 id col1 col2 col3 col4 col5 col6 col7 1 C B A N/A N/A N/A N/A 2 T S R Q P N/A N/A 3 N M N/A N/A N/A N/A N/A

该行包含分隔的列更改。

请通过使用游标在 SQL/PLSQL 中提供完整的解决方案来帮助我。

【问题讨论】:

这里有一个实现游标的教程:tutorialspoint.com/plsql/plsql_cursors.htm 【参考方案1】:

我自己回答了,因为我成功找到了解决方案:

选择 table1.id, 案子 WHEN REGEXP_COUNT(b.Hirerachy, ':') > 0 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')) 其他“不适用” 结束“col1”,

案例 当 REGEXP_COUNT(b.Hirerachy, ':') > 1 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-1) 其他“不适用” 结束“col2”,

案例 当 REGEXP_COUNT(b.Hirerachy, ':') > 2 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-2) 其他“不适用” 结束“col3”,

案例 当 REGEXP_COUNT(b.Hirerachy, ':') > 3 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-3) 其他“不适用” 结束“col4”,

案例 WHEN REGEXP_COUNT(b.Hireachy, ':') > 4 那么 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-4) 其他“不适用” 结束“col5”,

案例 当 REGEXP_COUNT(b.Hirerachy, ':') > 5 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-5) 其他“不适用” 结束“col6”,

案例 WHEN REGEXP_COUNT(b.Hirerachy, ':') > 6 那么 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-6) 其他“不适用” 结束“col7”,

案例 WHEN REGEXP_COUNT(b.Hireachy, ':') > 7 那么 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-7) 其他“不适用” 结束“col8”,

案例 WHEN REGEXP_COUNT(b.Hirerachy, ':') > 8 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-8) 其他“不适用” 结束“col9”,

案例 当 REGEXP_COUNT(b.Hirerachy, ':') > 9 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-9) 其他“不适用” 结束“col10”,

案例 WHEN REGEXP_COUNT(b.Hirerachy, ':') > 10 然后 regexp_substr(层次结构,'[^:]+',1,REGEXP_COUNT(b.Hirerachy,':')-10) 其他“不适用” 结束“col11”

来自表 1

【讨论】:

以上是关于在 SQL 中将分隔的行拆分为列的主要内容,如果未能解决你的问题,请参考以下文章

在 Athena/Presto 中将数组拆分为列

在SQL过程中将一列中的逗号分隔值拆分为多列

如何将逗号分隔的值拆分为列

如何在 yii 视图中将内容拆分为列-单独的 div

Oracle PL/SQL 程序在源表中拆分逗号分隔的数据并推送到目标表中

将逗号分隔的字符串拆分为mysql中的行