在sql中递归连接列

tec*_*hno 8 mysql sql sql-server concatenation recursive-query

我有一个包含如下值的表

?????????????????????????????
? b ? l1 ? l2 ?  l3  ?  l4  ?
?????????????????????????????
? a ? b1 ? c1 ?  d1  ?  e1  ?
? d ? x1 ? y1 ? null ? null ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)

输出应该是:

?????????????
? ab1c1d1e1 ?
? ab1c1d1   ?
? ab1c1     ?
? ab1       ?
? dx1y1     ?
? dx1       ?
?????????????
Run Code Online (Sandbox Code Playgroud)

可能吗?我在这里看到一个模式,但能够弄清楚如何做到这一点.PS:ROLLUP不能用作服务器不支持它.

Fel*_*tan 6

使用UNION ALL:

SELECT * FROM(
    SELECT  b + l1 + l2 + l3 + l4 FROM tbl UNION ALL
    SELECT  b + l1 + l2 + l3 FROM tbl UNION ALL
    SELECT  b + l1 + l2 FROM tbl UNION ALL
    SELECT  b + l1 FROM tbl
) AS t(a)
WHERE a IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

执行计划:

在此输入图像描述


这是另一种方法UNPIVOT,这将只扫描一次表:

SELECT x.a
FROM tbl t
CROSS APPLY(VALUES
    (b + l1 + l2 + l3 + l4),
    (b + l1 + l2 + l3),
    (b + l1 + l2),
    (b + l1)
) AS x(a)
WHERE a IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

执行计划:

在此输入图像描述