Para conseguirmos criar de uma maneira bem rápida uma somatoria com base em um group by (numérico) e ainda exibindo uma string informativa (total) sem precisar criar union ou qualquer outro recurso mais complexo, basta usarmos os comandos CASE GROUPING no retorno e ROLLUP no agrupamento. O CASE GROUPING verifica a necessidade de inserir o conteúdo do campo ou um valor string conforme as condições (= 1 quando chegar no “registro” somatório) e o ROLLUP usado junto com o GROUP BY calcula o total em si.
Veja exemplo:
1 2 3 4 5 6 7 | SELECT CASE GROUPING (CAMPO_AGRUPADOR) WHEN 1 THEN 'TOTAL_GERAL' ELSE CAMPO_AGRUPADOR END AS CATEGORIA, COUNT(CAMPO_SOMADO) AS SUB_TOTAL FROM TABELA GROUP BY ROLLUP(CAMPO_AGRUPADOR); |