我刚刚学会了使用分组集子句,我相信我可以重写我的一个旧查询。目前,它是来自 CTE 的 5 个不同分组的联合。我知道我应该能够轻松地将其更改为通过偶数汇总的分组集分组到的不同层次结构,但我需要在每个级别或分组上指定一个文字。我无法向您展示我的实际代码,但我在下面有一个示例。
select
b.LEVEL_ONE, b.LEVEL_TWO, b.LEVEL_THREE, b.LEVEL_FOUR, b.LEVEL_FIVE,
case
when (grouping(b.LEVEL_FIVE)=1) then ''
when ...
when ...
when ...
when ...
when ...
end as'LEVEL_TYPE',
sum(b.VALUE) as TOTAL
from
BASE b
where
...
group by GROUPING SETS(
(b.LEVEL_ONE, b.LEVEL_TWO, b.LEVEL_THREE, b.LEVEL_FOUR, b.LEVEL_FIVE),
(b.LEVEL_ONE, b.LEVEL_TWO, b.LEVEL_THREE, b.LEVEL_FOUR),
(b.LEVEL_ONE, b.LEVEL_TWO, b.LEVEL_THREE),
(b.LEVEL_ONE, b.LEVEL_TWO, b.LEVEL_FOUR),
(b.LEVEL_ONE, b.LEVEL_TWO),
(b.LEVEL_ONE, b.LEVEL_TWO)
)
这只是我想我想去的地方的一般概念。我遇到的问题是当我使用第 3 或第 4 个分组集时如何指定文字。有任何想法吗?
编辑:
预期结果是如下所示的行:
LEVEL_ONE | LEVEL_TWO | LEVEL_THREE | LEVEL_FOUR | LEVEL_FIVE | LEVEL_TYPE | TOTAL
'lvl1' | 'lvl2' | 'lvl3' | 'lvl4' | 'lvl5' | 'LEVEL 5' | (int)
...
'lvl1' | 'lvl2' | 'lvl3' | 'lvl4' | null | 'LEVEL 3,4'| (int)
...
'lvl1' | 'lvl2' | null | 'lvl4' | null | 'LEVEL 4' | (int)
...
'lvl1' | 'lvl2' | 'lvl3' | null | null | 'LEVEL 3' | (int)
...
'lvl1' | 'lvl2' | null | null | null | 'LEVEL 2' | (int)
...
'lvl1' | null | null | null | null | 'LEVEL 1' | (int)
...