Pular para o conteúdo

Fóruns SQL e PL/SQL O que ha de errado nessa function? Nao acumula valor O que ha de errado nessa function? Nao acumula valor

#94374
fsitja
Participante

    Opa, beleza Marcio,

    Então, mas como vai ser feita a consulta? Se o Mês for passado para o SQL daria para colocar o que postei antes no from (ou numa view) e selecionar apenas a linha do mês desejado. Exemplo:


    SQL> select conta, ano, mes, valor_acumulado_ano
    2 from
    3 (
    4 select conta,
    5 ano,
    6 mes,
    7 movim_liquido_mes,
    8 valor_acumulado_ano
    9 from (select conta,
    10 to_char(data_lanc, 'YYYY') ano,
    11 to_char(data_lanc, 'MM') mes,
    12 sum(case when debito is not null then valor * -1
    13 when credito is not null then valor end) movim_liquido_mes,
    14 sum(sum(case when debito is not null then valor * -1
    15 when credito is not null then valor end))
    16 over (partition by conta, to_char(data_lanc, 'YYYY') order by to_char(data_lanc, 'MM') asc) valor_acumulado_ano
    17 from clanca
    18 group by conta, to_char(data_lanc, 'MM'), to_char(data_lanc, 'YYYY'))
    19 ) where mes = 3;

      CONTA ANO  MES VALOR_ACUMULADO_ANO
    

        100 2010 03                 2500
        200 2010 03                 3000
    

    Ou colocando numa view:

    SQL> create or replace view vw_movimento_mensal as
    2 select conta,
    3 ano,
    4 mes,
    5 movim_liquido_mes,
    6 valor_acumulado_ano
    7 from (select conta,
    8 to_char(data_lanc, 'YYYY') ano,
    9 to_char(data_lanc, 'MM') mes,
    10 sum(case when debito is not null then valor * -1
    11 when credito is not null then valor end) movim_liquido_mes,
    12 sum(sum(case when debito is not null then valor * -1
    13 when credito is not null then valor end))
    14 over (partition by conta, to_char(data_lanc, 'YYYY') order by to_char(data_lanc, 'MM') asc) valor_acumulado_ano
    15 from clanca
    16 group by conta, to_char(data_lanc, 'MM'), to_char(data_lanc, 'YYYY'));

    View created

    SQL> select * from vw_movimento_mensal where mes = 3;

      CONTA ANO  MES MOVIM_LIQUIDO_MES VALOR_ACUMULADO_ANO
    

        100 2010 03               -500                2500
        200 2010 03               -500                3000
    

    SQL>

    Como o mês de abril continha um lançamento também, ele não aparece nessa consulta no saldo de março ainda.