Oracle PL/SQL totalizador de resultados (ROLLUP/CUBE)

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.


2 Comments

  1. Don disse:

    Otimo … exemplo bem explicado e facil de entender.

  2. .rafa disse:

    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


Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*


*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>