Estava precisando de um totalizador de resultados SUM, onde estava me quebrando em fazer cursorzinhos para calcular isso, bom fazer cursor é hiper fácil, mas toda vida fazer isso ?
Ai encontrei duas funções muito da interessante, onde pode ser feito um totalizador de resultados, como por exemplo o SUM que já é um totalizador de resultados agrupados.
Vou mostrar um pequeno exemplo, pois ficará mais fácil de entender.
Tenho a tabela de faturamento TFATURA que contem:
FATURA -> número da nota fiscal
OPERACAO -> operacao de saida ou entrada da nota
CGC -> cgc do cliente
NSERIE -> número da série da nota
DT_EMISSAO -> data da emissao da nota
DT_MOVTO -> data de movimentação da nota
VL_TOTAL -> valor total da nota
CFOP -> Natureza de operação da nota
Agora vamos pensar assim, quero um total de notas que sairam por dia e mes:
select dt_movto, sum(vl_total) "Valor Total"
from tfatura
where operacao = 'S'
and dt_movto between '01/06/2006' and '30/06/2006'
group by rollup(dt_movto);
assim irá mostrar:
dt_movto Valor Total
---------- ------------
01/06/2006 120,00
02/06/2006 100,00
05/06/2006 1120,00
06/06/2006 70,00
07/06/2006 122,00
08/06/2006 10,00
09/06/2006 205,00
12/06/2006 333,00
13/06/2006 974,00
14/06/2006 6115,00
15/06/2006 837,00
16/06/2006 902,00
19/06/2006 991,00
20/06/2006 752,00
21/06/2006 111,00
22/06/2006 100,00
23/06/2006 811,00
26/06/2006 887,00
27/06/2006 2502,00
28/06/2006 1993,00
29/06/2006 5083,00
30/06/2006 2532,00
26670.00
E ai está o resultado do mês 26670.00. O cube funciona da mesma forma, agora é só testar.
Mais detalhes em psoug; Linha de Código; adp; databaseAbout.









Otimo … exemplo bem explicado e facil de entender.
E mais um detalhe que pode ser colocado neste select
select nvl(dt_movto,”Total”), sum(vl_total) “Valor Total”
from tfatura
where operacao = ‘S’
and dt_movto between ’01/06/2006′ and ’30/06/2006′
group by rollup(dt_movto);
Assim ali no final irá mostrar logo abaixo das datas como se a ultimo registro é mesmo o total.
Interessante para visualização