SQLServer - usando o rollup para quebrar e somar grupo, subgrupo e produto |
Top Previous Next |
|
select --codigo do grupo case when (grouping(g.cod_grupo) = 1) then -1 else g.cod_grupo end as cod_grupo,
--descricao do grupo case when (grouping(g.nome) = 1) then isnull((select nome from grupo where cod_grupo = g.cod_grupo),'ZTOTAL') else g.nome end as gruponome,
--codigo do subgrupo case when (grouping(p.cod_sub) = 1) then -1 else p.cod_sub end as cod_sub,
--descricao do subgrupo case when (grouping(s.nome) = 1) then isnull((select nome from sub where cod_grupo = g.cod_grupo and cod_sub = p.cod_sub),'ZTOTAL') else s.nome end as subnome,
--codigo do produto case when (grouping(p.cod_prod) = 1) then -1 else p.cod_prod end as cod_prod,
--descricao do produto case when (grouping(p.nome) = 1) then 'ZTOTAL' else p.nome end as nome,
--finalmente a soma! sum(p.valor) as soma
from prod p
inner join sub s on (s.cod_sub = p.cod_sub) inner join grupo g on (g.cod_grupo = s.cod_grupo)
group by g.cod_grupo, g.nome, p.cod_sub, s.nome, p.cod_prod, p.nome with rollup
--having é que faz a magica having (g.nome is null or not p.cod_sub is null) and (s.nome is null or not p.nome is null) order by gruponome, subnome, nome |