sql soma valores duplicados
Estou executando essa sql:
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
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
Curtidas 0
Respostas
Fsflorencio
13/04/2005
Olá Livia, não entendí direito.
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?
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
Livia
13/04/2005
Minha sql seleciona o codigo que no exemplo é a conta credito e a conta débito e dependendo da conta ele soma a credito ou a débito.
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á...
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
Livia
13/04/2005
Consegui resolver: :lol:
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!
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
Emerson Nascimento
13/04/2005
tente assim:
esse exemplo foi feito com o FB 1.5 (versões anteriores não possuem a função COALESCE())
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
Emerson Nascimento
13/04/2005
ou melhor:
note que não é necessário o GROUP BY
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