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 com Case [Resolvido]

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


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Nov 22, 2018 4:33 pm    Assunto: Consulta SQL com Case [Resolvido] Responder com Citação

Boa tarde,

Estou com uma dificuldade de criar uma consulta SQL com JOIN e CASE para soma de saldo.

Código:
SELECT a.NUMCON CodigoCondominio,
sum(b.SALDO) as TodasAsContas,
a.VALLAN as SaldoMesAnterior,
(case when c.DE_CRE = 'C' then SUM(c.VALLAN) END -
case when c.DE_CRE = 'D' then SUM(c.VALLAN) END) as SaldoHoje
FROM ASCCC002 a
left join asac0027 b on a.NUMCON = b.NUMCON
left join ASCCC001 c on a.NUMCON = c.NUMCON
group by a.NUMCON, a.VALLAN, c.DE_CRE
order by a.NUMCON


A coluna SaldoHoje está resultando NULL além disso está sendo gerado 2 linhas por registro.

O resultado da coluna SaldoHoje é obtido com:

Credito = Soma do campo VALLAN quando o campo DE_CRE = 'C'
Debito = Soma do campo VALLAN quando o campo DE_CRE = 'D'
SaldoHoje = Credito - Debito

Estou usando SQL Server 2008 R2 + ADO.

Qualquer ajuda será bem vinda.

Obrigado.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin


Editado pela última vez por natanbh1 em Qua Nov 28, 2018 1:12 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Nov 22, 2018 7:32 pm    Assunto: Responder com Citação

Boa noite,

Experimente deixar o trecho da coluna SaldoHoje dessa forma:

Código:
SUM(case when c.DE_CRE = 'C' then c.VALLAN else -c.VALLAN END) as SaldoHoje


E para completar remova a coluna c.DE_CRE do Group By.

Espero que ajude


Editado pela última vez por imex em Ter Mar 21, 2023 3:31 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Sex Nov 23, 2018 11:00 am    Assunto: Responder com Citação

Imex, funcionou alterando esta parte.

Mas notei que está somando errado agora o campo TodasAsContas.

Creio que seja algo no Join porque se eu comentar/remover a junção com a tabela ASCCC001, a soma volta funcionar corretamente.

Assim o campo SaldoHoje soma corretamente mas TodasAsContas calcula incorretamente:

Código:
SELECT
a.NUMCON as CodigoCondominio,
sum(b.SALDO) as TodasAsContas,
a.VALLAN as SaldoMesAnterior
,(SUM(case when c.DE_CRE = 'C' then c.VALLAN else -c.VALLAN END) + a.VALLAN) as SaldoHoje
FROM ASCCC002 a
left join asac0027 b on a.NUMCON = b.NUMCON
inner join ASCCC001 c on a.NUMCON = c.NUMCON
group by a.NUMCON, a.VALLAN
order by a.NUMCON


Se remover a junção com a tabela ASCCC001 a soma do campo TodasAsContas funciona corretamente:

Código:
SELECT
a.NUMCON as CodigoCondominio,
sum(b.SALDO) as TodasAsContas,
a.VALLAN as SaldoMesAnterior
FROM ASCCC002 a
left join asac0027 b on a.NUMCON = b.NUMCON
group by a.NUMCON, a.VALLAN
order by a.NUMCON


Desde já agradeço.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 23, 2018 1:53 pm    Assunto: Responder com Citação

Acho que uma alternativa para o seu caso seria o uso de uma subquery:

Código:
SELECT
    a.NUMCON as CodigoCondominio,
    sum(b.SALDO) as TodasAsContas,
    a.VALLAN as SaldoMesAnterior,
    (select SUM(case when c.DE_CRE = 'C' then c.VALLAN else -c.VALLAN END)
     from ASCCC001 c
     where a.NUMCON = c.NUMCON) + a.VALLAN as SaldoHoje
FROM ASCCC002 a
left join asac0027 b on a.NUMCON = b.NUMCON
group by a.NUMCON, a.VALLAN
order by a.NUMCON


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Nov 28, 2018 1:12 pm    Assunto: Responder com Citação

Funcionou perfeitmente, Imex.

Obrigado.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
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