Попробуйте использовать функции OLAP rollup
и grouping
как это:
select
nvl(subregion, region) region, sum("sum")
from t
group by region, rollup(subregion)
having case when count(*) = 1 then 0 else 1 end = grouping(subregion);
В приведенном выше,
having case when count(*) = 1 then 0 else 1 end = grouping(subregion);
Вышеприведенные исключает rolluped строку, если имеется только одна строка для этой области, так что существует не являются дубликатами.
Также избегайте использования зарезервированных ключевых слов, таких как сумма или счет в ваших идентификаторах.
Демо:
SQL> with t(REGION ,SUBREGION ,s) as (
2 select 'CORP' , 'CORP1' , 5 from dual union all
3 select 'CORP' , 'CORP2' , 10 from dual union all
4 select 'CORP' , 'CORP3' , 5 from dual union all
5 select 'SB' ,'SB1' ,10 from dual union all
6 select 'SB' ,'SB2' ,10 from dual union all
7 select 'MID' , null , 10 from dual union all
8 select 'LARGE' , null , 20 from dual
9 )
10 select
11 nvl(subregion, region) region, sum(s)
12 from t
13 group by region, rollup(subregion)
14 having case when count(*) = 1 then 0 else 1 end = grouping(subregion);
REGIO SUM(S)
----- ----------
SB1 10
SB2 10
SB 20
MID 10
CORP1 5
CORP2 10
CORP3 5
CORP 20
LARGE 20
9 rows selected.
SQL>
Что вы пробовали? Как вы создали первый отчет (так как второй будет незначительным изменением). – AndySavage