Fórum sql soma valores duplicados #50513
13/04/2005
0
select p.codigo,p.saldo_inicializacao,sum(distinct c.valor) as credito,sum(distinct d.valor) as debito
from plano p
left outer join lancamento c on (c.cod_emp=p.cod_emp and c.conta_credito=p.codigo and
c.mes_ano_base<´2004-10-01´ and c.situacao=1)
left outer join lancamento d on (d.cod_emp=p.cod_emp and d.conta_debito=p.codigo and
d.mes_ano_base<´2004-10-01´ and d.situacao=1)
where p.cod_emp=1 and p.codigo=53
group by p.codigo,p.saldo_inicializacao
só q ela está me retornando a soma de valores duplicados, por exemplo:
Conta_credito Conta_debito Valor
53 106 10,00
53 201 12,00
53 106 8,00
254 53 15,00
O resultado teria q ser o seguinte:
Conta Debito Credito
53 15,00 30,00
106 18,00 0
201 12,00 0
254 0 15,00
Mas o q a minha sql está fazendo é, a cada conta ele lista o restante, exemplo:
conta1 conta2
53 106
53 201
53 254
106 53
106 201
106 254
106 106
201 106
201 254
201 53
254 53
254 106
254 201
Imagina como ficaria a soma :( . Um exemplo que tenho aqui, é a conta 53, onde o valor do crédito deveria ser de 20 e o débito de 82, mas com essa sql o valor do crédito é 140 e do débito 164, onde estou errando??? :cry:
Obrigada
Livia
Livia
Curtir tópico
+ 0Posts
14/04/2005
Fsflorencio
A representação em forma de tabela se referem aos campos: Conta_credito Conta_debito Valor. E o sql seleciona: p.codigo, saldo_inicializacao, credito, debito.
Tem como dar uma explicada melhor?
Gostei + 0
14/04/2005
Livia
Por exemplo, na tabela de lancamento tenho conta crédito, conta débito e o valor. A minha conta crédito seria 53 e a minha conta débito seria 106 e o valor de 10,00. A minha sql traria
Codigo credito debito
53 10 0
106 0 10
Como tenho mais lançamentos, acho q acaba se perdendo ou algo parecido, talvez a condição esteja errado, ou sei lá...
Gostei + 0
14/04/2005
Livia
select distinct(c.codigo),c.saldo_inicializacao,
(select sum(l.valor)
from lancamento l
where (l.conta_credito=c.codigo) and
l.cod_emp=p.cod_emp and l.mes_ano_base=p.mes_ano_base and l.situacao=´1´) as credito,
(select sum(l.valor)
from lancamento l
where l.conta_debito=c.codigo and
l.cod_emp=p.cod_emp and l.mes_ano_base=p.mes_ano_base and l.situacao=´1´) as debito
from lancamento p,plano c
where p.cod_emp=1 and p.cod_Emp=c.cod_emp and c.codigo=53
and p.mes_ano_base <´2004-10-01´
Ufa! até q enfim 8)
Vlw!
Gostei + 0
14/04/2005
Emerson Nascimento
select p.cod_emp, p.codigo, (select coalesce(sum(c.valor),0) from lancamento c where (c.cod_emp=p.cod_emp and c.conta_credito=p.codigo and c.mes_ano_base<´01.10.2004´ and c.situacao=1)) creditado, (select coalesce(sum(d.valor),0) from lancamento d where (d.cod_emp=p.cod_emp and d.conta_debito=p.codigo and d.mes_ano_base<´01.10.2004´ and d.situacao=1)) debitado from plano p where p.cod_emp=1 group by p.cod_emp, p.codigo order by p.cod_emp, p.codigo
esse exemplo foi feito com o FB 1.5 (versões anteriores não possuem a função COALESCE())
Gostei + 0
14/04/2005
Emerson Nascimento
select p.cod_emp, p.codigo, (select coalesce(sum(c.valor),0) from lancamento c where (c.cod_emp=p.cod_emp and c.conta_credito=p.codigo and c.mes_ano_base<´01.10.2004´ and c.situacao=1)) creditado, (select coalesce(sum(d.valor),0) from lancamento d where (d.cod_emp=p.cod_emp and d.conta_debito=p.codigo and d.mes_ano_base<´01.10.2004´ and d.situacao=1)) debitado from plano p where p.cod_emp=1 order by p.cod_emp, p.codigo
note que não é necessário o GROUP BY
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)