› 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
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.