|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
StraightFree Novato
Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 86
|
Enviada: Qui Ago 24, 2017 11:43 pm Assunto: Consulta SQL retornando fluxo de contas |
|
|
Boa noite caros amigos do AD,
Venho mais uma vez, humildemente, solicitar a ajuda de vocês para resolver uma situação.
Possuo uma tabela (CONTACORRENTE) que recebe valores que pode ser do tipo débito e crédito.
Tenho um select que retorna três colunas:
1 - Soma de todos os valores a crédito;
2 - Soma de todos os valores a débito;
3 - Saldo entre as contas de crédito e débito;
Gostaria de aperfeiçoar esse select que possuo, resultando em uma espécie de um extrato bancário. Assim supondo que exista na tabela os registro abaixo:
Data: 01/08/2017; Tipo: Débito; Valor: 100,00
Data: 04/08/2017; Tipo: crédito; Valor: 40,00
Data: 15/08/2017; Tipo: crédito; Valor: 80,00
Data: 23/08/2017; Tipo: Débito; Valor: 10,00
O resultado do select que preciso deve ser mais ou menos isso:
Data............Tipo.......Valor.......Saldo
01/08/2017 | Débito | 100,00 | -100,00
04/08/2017 | crédito | 40,00 | -60,00
15/08/2017 | crédito | 80,00 | 20,00
23/08/2017 | Débito | 10,00 | 10,00
Se alguem puder me dar uma luz, ficarei muito agradecido.
Qualquer ajuda é bem vinda!
Obrigado! |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Sex Ago 25, 2017 8:35 am Assunto: |
|
|
Qual banco de dados você está utilizando? |
|
Voltar ao Topo |
|
|
StraightFree Novato
Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 86
|
Enviada: Sex Ago 25, 2017 9:01 am Assunto: |
|
|
leo, bom dia!
Obrigado pela resposta.
Estou utilizando o banco Firebird 2.1.
O select que uso para somar os créditos, débitos e saldo é o abaixo:
Código: |
SELECT
SUM(CASE WHEN TIPOMOVTO = 'C' THEN VALOR ELSE 0 END) AS CREDITO,
SUM(CASE WHEN TIPOMOVTO = 'D' THEN VALOR ELSE 0 END) AS DEBITO,
SUM(VALOR * CASE WHEN TIPOMOVTO = 'C' THEN 1 ELSE -1 END) AS SALDO
FROM CONTACORRENTE
WHERE
TIPOENVOLVIDO = 1 AND CODENVOLVIDO = 33254 |
Se puder ajudar, agradecerei muito.
Obrigado! |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Sex Ago 25, 2017 10:00 am Assunto: |
|
|
Não tenho o firebird para testar, mas funcionou aqui no SQL Server e pelo que eu li funciona no firebird também
Código: | SELECT
SUM(CASE WHEN TIPOMOVTO = 'C' THEN VALOR ELSE 0 END) AS CREDITO,
SUM(CASE WHEN TIPOMOVTO = 'D' THEN VALOR ELSE 0 END) AS DEBITO,
SUM(VALOR * CASE WHEN TIPOMOVTO = 'C' THEN 1 ELSE -1 END) OVER(ORDER BY ContaCorrente.ID) AS SALDO
FROM CONTACORRENTE
WHERE
TIPOENVOLVIDO = 1 AND CODENVOLVIDO = 33254 |
|
|
Voltar ao Topo |
|
|
StraightFree Novato
Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 86
|
Enviada: Sex Ago 25, 2017 10:17 am Assunto: |
|
|
leo,
Mais uma vez agradeço pela ajuda.
No entanto, o firebird retorna esse erro após a função OVER:
Código: | can't format message 13:896 -- message file C:\Program Files (x86)\HK-Software\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 4, column 67.
(. |
Sabe se existe alguma função equivalente para o Firebird?
Obrigado! |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Sex Ago 25, 2017 10:28 am Assunto: |
|
|
Ai teria que pesquisar, e nesse caso, acredito que seja mais fácil você fazer isso, não que eu não queira ajudar, mas como eu disse, não tenho o Firebird aqui na empresa, então não teria como validar o resultado da pesquisa.
Mas em todo o caso, vou ver se encontro algo e aviso aqui caso encontre algo que pode funcionar |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
|
Voltar ao Topo |
|
|
StraightFree Novato
Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 86
|
Enviada: Sex Ago 25, 2017 3:25 pm Assunto: |
|
|
leo,
Agradeço mais uma vez sua ajuda.
Consegui resolver da seguinte maneira.
Código: |
SELECT
e.DATA,e.hora,e.tipomovto,e.valor,e.observacao ,
COALESCE((SELECT sum( CASE TipoMOVTO WHEN 'C' THEN Valor ELSE Valor * -1 END )
FROM CONTACORRENTE s
WHERE (s.data < e.data) and (TIPOENVOLVIDO = 1) AND (CODENVOLVIDO = 1)
OR ( (s.data = e.data) AND (s.SEQUENCIA <e>= ('01/01/2017')
AND data <= ('01/01/2018') and (TIPOENVOLVIDO = 1) AND (CODENVOLVIDO = 1)
order by data DESC, hora desc,SEQUENCIA |
Caso alguém precise, fica aqui a solução para pesquisa.
Obrigado! |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|