Array
(
)

Erro na execução de um codigo em SQL

Tiago Rodrigues
   - 30 out 2015

Estou precisando calcular a media final de uma soma, so que nao estou conseguindo. Segue abaixo o codigo. Obrigado!
SELECT ITEVENDAS.CODIGO,
ESTOQUE.NOME,
SUM(ITEVENDAS.QTD) AS QTD_VENDA,
AVG(ESTOQUE.PRECO_CUSTO) AS MEDIA_PRECO_CUSTO,
AVG(ITEVENDAS.PRECO) AS MEDIA_PRECO_VENDA,
SUM(ITEVENDAS.QTD) * AVG(ESTOQUE.PRECO_CUSTO) AS TOTAL_CUSTO_MEDIO,
SUM(ITEVENDAS.QTD) * AVG(ITEVENDAS.PRECO) AS TOTAL_PRECO_VENDA,
(SUM(ITEVENDAS.QTD) * AVG(ITEVENDAS.PRECO))- (SUM(ITEVENDAS.QTD) * AVG(ESTOQUE.PRECO_CUSTO)) AS LUCRO,
VENDAS.VENDEDOR,
AVG ((SUM(ITEVENDAS.QTD) * AVG(ITEVENDAS.PRECO))- (SUM(ITEVENDAS.QTD) * AVG(ESTOQUE.PRECO_CUSTO))) AS MEDIA
----Esse de média acima que nao está funcionando)

FROM ITEVENDAS,EST_ADICIONAIS,ESTOQUE, VENDAS
WHERE ITEVENDAS.CODIGO=EST_ADICIONAIS.CODIGO AND
ITEVENDAS.CODIGO=ESTOQUE.CODIGO AND
VENDAS.NOTA=ITEVENDAS.NOTA AND
ITEVENDAS.CANCELADO=0 AND
VENDAS.VENDEDOR=1 AND
ITEVENDAS.EMISSAO>='01/01/2015' AND
ITEVENDAS.EMISSAO<='12/31/2015'

GROUP BY
ITEVENDAS.CODIGO,
ESTOQUE.NOME,
VENDAS.VENDEDOR

Marcos P
   - 30 out 2015

Sempre que postar código no fórum, use a tag <Inserir Código>. Isso facilita a leitura do código postado !

Qual banco de dados ?

Quando você diz que esse cálculo não funciona, é porque o banco gera algum erro ou simplesmente o valor é calculado errado ?

Substituindo as variáveis de sua própria consulta, no cálculo da média... temos :

#CódigoAVG ((QTD_VENDA * MEDIA_PRECO_VENDA)) - (TOTAL_CUSTO_MEDIO)) AS MEDIA

É realmente esse código que você deseja fazer ?

Tiago Rodrigues
   - 30 out 2015

Tranquilo. Firebird. Deu como codigo invalido. Obrigado!

Marcos P
   - 30 out 2015

Tente jogar os dados ( exceto a Média ) em uma temporária ( ou sub-query ) e depois calcule a média em uma outra consulta...

Tiago Rodrigues
   - 31 out 2015

Vou estudar como se faz isso...obrigado!

Fernando Vicari
   - 04 nov 2015

Boa noite Tiago,

Você pode utilizar subquery. Abaixo coloquei um código de exemplo, porém não testei.

#CódigoSELECT CODIGO, NOME, QTD_VENDA, MEDIA_PRECO_CUSTO, MEDIA_PRECO_VENDA,
TOTAL_CUSTO_MEDIO, TOTAL_PRECO_VENDA, LUCRO, VENDEDOR,
AVG((QTD_VENDA * MEDIA_PRECO_VENDA)- (QTD_VENDA * MEDIA_PRECO_CUSTO)) AS MEDIA
FROM (SELECT ITEVENDAS.CODIGO, ESTOQUE.NOME,
SUM(ITEVENDAS.QTD) AS QTD_VENDA,
AVG(ESTOQUE.PRECO_CUSTO) AS MEDIA_PRECO_CUSTO,
AVG(ITEVENDAS.PRECO) AS MEDIA_PRECO_VENDA,
SUM(ITEVENDAS.QTD) * AVG(ESTOQUE.PRECO_CUSTO) AS TOTAL_CUSTO_MEDIO,
SUM(ITEVENDAS.QTD) * AVG(ITEVENDAS.PRECO) AS TOTAL_PRECO_VENDA,
(SUM(ITEVENDAS.QTD) * AVG(ITEVENDAS.PRECO))- (SUM(ITEVENDAS.QTD) * AVG(ESTOQUE.PRECO_CUSTO)) AS LUCRO,
VENDAS.VENDEDOR
FROM ITEVENDAS,EST_ADICIONAIS,ESTOQUE, VENDAS
WHERE ITEVENDAS.CODIGO=EST_ADICIONAIS.CODIGO AND
ITEVENDAS.CODIGO=ESTOQUE.CODIGO AND
VENDAS.NOTA=ITEVENDAS.NOTA AND
ITEVENDAS.CANCELADO=0 AND
VENDAS.VENDEDOR=1 AND
ITEVENDAS.EMISSAO>='01/01/2015' AND
ITEVENDAS.EMISSAO<='12/31/2015'
GROUP BY ITEVENDAS.CODIGO, ESTOQUE.NOME, VENDAS.VENDEDOR)
GROUP BY CODIGO, NOME, QTD_VENDA, MEDIA_PRECO_CUSTO, MEDIA_PRECO_VENDA,
TOTAL_CUSTO_MEDIO, TOTAL_PRECO_VENDA, LUCRO, VENDEDOR