Duvida com select

Delphi

25/06/2010

Boa tarde,

Estou com a seguinte situação:

Tenho por exemplo 1 venda com tres itens

Dia: 01/05/2010
Total da Venda: 10,00

Item 1:Custo 2,00
Item 2:Custo 1,50
Item 3:Custo 2,20

Ai faço o select totalizando as vendas por dia e somando os custos dos items, tbm por dia:

select extract(day from datven) as dia,
       sum(totalliq) as totvenda,
       sum(vei.pcusto*vei.qtd) as totcusto

from vendas ven
left join vendasi vei on ven.pedido=vei.pedido

where datven between :dat1 and :dat2

group by 1
order by 1



Este select está me retornando:
- Dia da soma
- TotVenda esta triplicando retornando como 30,00
- Custo está correto pois somou da tabela itens os custos

O problema é que ele está somando tres vezes o total da venda pois existem 3 itens.


Mario Inacio

Mario Inacio

Curtidas 0

Respostas

Mario Inacio

Mario Inacio

25/06/2010

Segue uma demonstração do resumo que preciso:

GOSTEI 0
Mario Inacio

Mario Inacio

25/06/2010

Resolvido:

select extract(day from datven) as dia,
       sum(totalliq) as totvenda,
       sum((select sum(vei.navenda_pcusto*vei.qtd) from vendasi vei where ven.pedido=vei.pedido)) as totcusto
from vendas ven

where datven between :dat1 and :dat2 group by 1

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/06/2010

select
  ven.datven as dia,
  (select sum(v2.totalliq) from vendas v2
   where v2.datven = ven.datven) as totvenda,
  sum(vei.pcusto * vei.qtd) as totcusto
from
  vendas ven
left join
  vendasi vei on ven.pedido = vei.pedido
where
  ven.datven between :dat1 and :dat2
group by
  ven.datven
order by
  ven.datven

GOSTEI 0
Rodrigo Lopez

Rodrigo Lopez

25/06/2010

Acho que voce pode fazer de dois jeitos:   Trocar sum(totaliq) as totvenda por totaliq as totvenda.   Ou, o jeito que acho mais correto, é mudar a estrutura da sua tabela, colocando o campo Venda na tabela de itens, pois ai sim voce poderá colocar sum(vei.venda).   Porque esta acontecendo isso:   Quando você junta duas tabelas, ele repete a quantidade de linhas da 1ª (vendas) para cada registro da 2ª (itens vendas), e dando o SUM na coluna VENDA, na verdade ele vai multiplicar a venda por quanto itens você tiver.   Espero ter ajudado.    
GOSTEI 0
POSTAR