ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Consulta SQL retornando fluxo de contas

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
StraightFree
Novato
Novato


Registrado: Sexta-Feira, 17 de Julho de 2015
Mensagens: 86

MensagemEnviada: Qui Ago 24, 2017 11:43 pm    Assunto: Consulta SQL retornando fluxo de contas Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Ago 25, 2017 8:35 am    Assunto: Responder com Citação

Qual banco de dados você está utilizando?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
StraightFree
Novato
Novato


Registrado: Sexta-Feira, 17 de Julho de 2015
Mensagens: 86

MensagemEnviada: Sex Ago 25, 2017 9:01 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Ago 25, 2017 10:00 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
StraightFree
Novato
Novato


Registrado: Sexta-Feira, 17 de Julho de 2015
Mensagens: 86

MensagemEnviada: Sex Ago 25, 2017 10:17 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Ago 25, 2017 10:28 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Ago 25, 2017 10:43 am    Assunto: Responder com Citação

Inclusive, vê se esse tópico ajuda:
http://www.activedelphi.com.br/forum/viewtopic.php?p=468533&sid=e3ee0018bc1af968fcd2543444cc3dc7
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
StraightFree
Novato
Novato


Registrado: Sexta-Feira, 17 de Julho de 2015
Mensagens: 86

MensagemEnviada: Sex Ago 25, 2017 3:25 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB