gpt4 book ai didi

mysql - 递归连接sql中的列

转载 作者:可可西里 更新时间:2023-11-01 06:33:15 25 4
gpt4 key购买 nike

我有一个包含如下值的表

╔═══╦════╦════╦══════╦══════╗
║ b ║ l1 ║ l2 ║ l3 ║ l4 ║
╠═══╬════╬════╬══════╬══════╣
║ a ║ b1 ║ c1 ║ d1 ║ e1 ║
║ d ║ x1 ║ y1 ║ null ║ null ║
╚═══╩════╩════╩══════╩══════╝

输出应该是:

╔═══════════╗
║ ab1c1d1e1 ║
║ ab1c1d1 ║
║ ab1c1 ║
║ ab1 ║
║ dx1y1 ║
║ dx1 ║
╚═══════════╝

这可能吗?我在这里看到一个模式,但能够弄清楚如何去做。P.S: ROLLUP 无法使用,服务器不支持。

最佳答案

使用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

执行计划:

enter image description here


这是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

执行计划:

enter image description here

关于mysql - 递归连接sql中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com