【发布时间】:2016-04-05 11:48:32
【问题描述】:
我有一个表测试,其中包含
TEST
----
tablename|columnvalue|rankofcolumn
A|C1|1
A|C2|2
A|C3|3
A|C4|4
B|CX1|1
B|CX2|2
C|CY1|1
C|CY2|2
C|CY3|3
我想生成路径以及其他列如下
RESULT
----
tablename|columnvalue|rankofcolumn|path
A|C1|1|C1
A|C2|2|C1->C2
A|C3|3|C1->C2->C3
A|C4|4|C1->C2->C3->C4
B|CX1|1|CX1
B|CX2|2|CX1->CX2
C|CY1|1|CY1
C|CY2|2|CY1->CY2
C|CY3|3|CY1->CY2->CY3
根据question,我可以使用递归 CTE 来实现这一点
WITH r ( tablename, columnvalue, rankofcolumn, PATH ) AS
(SELECT tablename,
columnvalue,
rankofcolumn,
columnvalue
FROM test
WHERE rankofcolumn = 1
UNION ALL
SELECT xx.tablename,
xx.columnvalue,
xx.rankofcolumn,
r.PATH || '->' || xx.columnvalue
FROM r
JOIN test xx
ON xx.tablename = r.tablename
AND xx.rankofcolumn = r.rankofcolumn + 1)
SELECT *
FROM r;
但我正在使用目前缺少此选项的 WX2 数据库。是否有 SQL 替代方案?
【问题讨论】:
-
WX2 不会促进 CTE,或者您正在为此输出寻求其他解决方案
-
在上一个问题中您说允许中间表;还可以吗?
-
@AlexPoole 是的。我们可以有中间表或视图。
-
@mohan111 是的,我正在为这个输出寻求另一种解决方案
标签: sql common-table-expression recursive-cte wx2