假设我们可以访问GROUP BY ROLLUP,但不能访问GROUP BY CUBE (例如,在mysql中,甚至在postgres中,如果我们想象CUBE在旧版本中不存在)。
下面显示了ROLLUP和CUBE之间的区别
ROLLUP (a, b, c)
(a, b, c)
(a, b)
(a)
()CUBE (a, b, c)
(a, b, c)
(a, b)
(a, c)
(a)
(b, c)
(b)
(c)
()如果CUBE不是一个选项,那么将ROLLUP函数映射为CUBE的正确方法是什么?看起来应该是:
ROLLUP (a,b,c) UNION ALL
ROLLUP (a, c) UNION ALL
ROLLUP ( b,c) UNION ALL
ROLLUP ( c)这是正确的理解吗?如果是这样,是否可以使用递归CTE或其他方法来模拟具有N个变量的rollup的CUBE函数?如果是这样的话,如何做到这一点呢?
发布于 2021-11-03 19:24:35
您可以使用一个过程来生成sql。
您可以尝试一个过程,如下所示的伪
Create procedure Rollup(a, b)
As
Begin
For i in [a, b, c] -- or whatever array you may have
For j! =i
Rollup(i, j)
End loop;
End loop;
ENDhttps://stackoverflow.com/questions/69830330
复制相似问题