Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Nov 22, 2018 4:33 pm Assunto: Consulta SQL com Case [Resolvido] |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Nov 22, 2018 7:32 pm Assunto: |
|
|
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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Sex Nov 23, 2018 11:00 am Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Nov 23, 2018 1:53 pm Assunto: |
|
|
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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Nov 28, 2018 1:12 pm Assunto: |
|
|
Funcionou perfeitmente, Imex.
Obrigado. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
|