我有一个包含如下值的表
╔═══╦════╦════╦══════╦══════╗
║ 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
执行计划:
这是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
执行计划:
关于mysql - 递归连接sql中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165600/