Marcelo,
Não sei se ajuda, mas peguei esse script de aulas que ministro sobre
BD, veja se atente a estrutura mostra uma tabela de emprestimo de
colaboradores que é semelhante a sua estrutura de extrato.
Segue script:
-- ddl
--DROP TABLE emprestimo_colaborador;
CREATE TABLE emprestimo_colaborador
(
id_emprestimo_colaborador bigint
, id_colaborador bigint NOT NULL
, dt_lancamento date NOT NULL
, tipo_lancamento varchar(1) NOT NULL
, vlr_lancamento numeric(14,2) NOT NULL
, CONSTRAINT pk_emprestimo_colaborador_id_ec PRIMARY KEY
(id_emprestimo_colaborador)
);
--dml
-- efetuando lancamentos relativo a emprestimo colaborador
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(1,2,'2012-03-10','C', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(2,2,'2012-03-25','C',150.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(3,2,'2012-04-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(4,2,'2012-05-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(5,2,'2012-06-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(6,2,'2012-06-08','C',100.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(7,2,'2012-06-12','C',100.00);
-- efetuando lancamento relativo a emprestimo colaborador 2
-- efetuando lancamentos relativo a emprestimo colaborador
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(8,2,'2012-03-10','C', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(9,2,'2012-03-25','C',150.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(10,2,'2012-04-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(11,2,'2012-05-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(12,2,'2012-06-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(13,2,'2012-06-08','C',100.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(14,2,'2012-06-12','C',100.00);
-- TRUNCATE TABLE emprestimo_colaborador;
--dql
-- listando emprestimo
SELECT *
FROM emprestimo_colaborador
;
-- listando saldo, com coluna informando débito e crédito, detalhado,
com acompanhamento do saldo, forma 01
SELECT id_colaborador
, dt_lancamento
, tipo_lancamento
, vlr_lancamento
,
(
SELECT sum
(
CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento * -1
WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
ELSE
0.00
END
)
FROM emprestimo_colaborador
WHERE dt_lancamento <= ec.dt_lancamento
AND id_colaborador = 2
) AS saldo
FROM emprestimo_colaborador AS ec
ORDER BY dt_lancamento
;
-- listando saldo, com coluna informando débito e crédito, detalhado,
com acompanhamento do saldo, com mais detalhes forma 02
SELECT id_colaborador
, dt_lancamento
, tipo_lancamento
, CASE WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
ELSE
0.00
END AS credito
, CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento
ELSE
0.00
END AS debito
,
(
SELECT sum
(
CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento * -1
WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
ELSE
0.00
END
)
FROM emprestimo_colaborador
WHERE dt_lancamento <= ec.dt_lancamento
AND id_colaborador = 2
) AS saldo
FROM emprestimo_colaborador AS ec
ORDER BY ec.dt_lancamento
;
No script acima vc pode mudar o campo date para timestamp.
Espero ter ajudado.
Em 26 de fevereiro de 2013 09:14, José Mello Júnior
<[email protected]> escreveu:
> Utilizando o Case e functions window para demonstrar o saldo, nem há
> necessidade de qualquer outra coisa.
>
> Att
>
> Em 26 de fevereiro de 2013 08:27, Ricardo Carlini Sperandio
> <[email protected]> escreveu:
>
>> Enviado pelo Motorola Razr
>> Em 25/02/2013 23:50, "Eduardo Almeida" <[email protected]>
>> escreveu:
>>
>>
>> >
>> > tente algo como
>> >
>> > SELECT
>> > ( CASE WHEN ( flag = 'credito' ) THEN total ELSE 0 END) AS
>> > receitas,
>> > ( CASE WHEN ( flag = 'debito' ) THEN total ELSE 0 END) AS
>> > despesas
>> > FROM tbl_tabela
>> > WHERE flag IN ('credito', 'debito') ;
>> >
>> >
>> >
>> >
>> > On 25/02/2013 23:30, Marcelo Silva wrote:
>> >>
>> >>
>> >>
>> >> From: Eduardo Almeida
>> >> Sent: Monday, February 25, 2013 11:20 PM
>> >> To: Comunidade PostgreSQL Brasileira
>> >> Subject: Re: [pgbr-geral] SQL Para extrato de C/C
>> >>
>> >> On 25/02/2013 16:19, Marcelo da Silva wrote:
>> >>>
>> >>> Pessoal, tenho um duvida simples porem gostaria da opinião dos
>> >>> amigos...
>> >>> Preciso montar um extrato estilo do banco Itau, mais ou menos assim
>> >>>
>> >>> Historico A Pagar A Receber Diferença Saldo
>> >>> teste1 0,00 10,00 10,00 10,00
>> >>> teste2 -25,00 20,00 -5,00 5,00
>> >>> ...
>> >>>
>> >>> Bem... como uso uma tabela só para guardar contas a pagar e receber, é
>> >>> simples pegar Debitos e Creditos,
>> >>> mas o resultado sai em um unica coluna, gostaria de ter o layout
>> >>> acima...
>> >>> Será que é possivel fazer no SQL ou terei que montar o relatorio na
>> >>> mão?
>> >>>
>> >>> O que tenho hoje é assim:
>> >>>
>> >>> teste 1 0,00
>> >>> teste 1 10,00
>> >>> teste 2 -25,00
>> >>> teste 2 20,00
>> >>> ...
>> >>
>> >>
>> >> E como você sabe o que é a pagar e o que é a receber?
>> >>
>> >>
>> >> Tem um Flag P/R (Pagar / Receber) na tabela
>> >>>
>> >>>
>> >>> Estive pensando em Union mas pelo que vejo não é isso...
>> >>> Com crossover de tabelas tambem não consegui chegar num resultado
>> >>> esperado
>> >>>
>> >>> :(
>> >>>
>> >>>
>> >>> Marcelo Silva
>> >>> ----------------------------------
>> >>>
>> >>>
>> >>>
>> >>> _______________________________________________
>> >>> pgbr-geral mailing list
>> >>> [email protected]
>> >>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >>
>> >>
>> >>
>> >> --
>> >> Eduardo Almeida - Software Engineer
>> >> [email protected] - 27 3021-2430 / 27 9839 3755
>> >>
>> >> WEB2 Solutions - Inovando, sempre!
>> >>
>> >> ________________________________
>> >> _______________________________________________
>> >> pgbr-geral mailing list
>> >> [email protected]
>> >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >>
>> >>
>> >> _______________________________________________
>> >> pgbr-geral mailing list
>> >> [email protected]
>> >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >
>> >
>> >
>> > --
>> > Eduardo Almeida - Software Engineer
>> > [email protected] - 27 3021-2430 / 27 9839 3755
>> >
>> > WEB2 Solutions - Inovando, sempre!
>> >
>> > _______________________________________________
>> > pgbr-geral mailing list
>> > [email protected]
>> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >
>> Eu fiz algo parecido para o sistema de controle do nosso campeonato de
>> kart.
>> A melhor forma que encontrei foi usando uma storage procedure. Que pode
>> tanto devolver o resultado diretamente quanto alimentar uma tabela.
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
>
> --
> Mello Júnior
> 41.3252-3555
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral