Duvida com select
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.
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
Curtidas 0
Respostas
Mario Inacio
25/06/2010
Segue uma demonstração do resumo que preciso:
GOSTEI 0
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
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
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
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