grouping sets 句の使用法を学んだばかりで、古いクエリの 1 つを書き直すことができると思います。現在、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)
...