2

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)
...
4

1 に答える 1