Erro na execução de um codigo em SQL
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
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
Tiago Rodrigues
Curtidas 0
Respostas
Marcos P
30/10/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 :
É realmente esse código que você deseja fazer ?
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 :
AVG ((QTD_VENDA * MEDIA_PRECO_VENDA)) - (TOTAL_CUSTO_MEDIO)) AS MEDIA
É realmente esse código que você deseja fazer ?
GOSTEI 0
Tiago Rodrigues
30/10/2015
Tranquilo. Firebird. Deu como codigo invalido. Obrigado!
GOSTEI 0
Marcos P
30/10/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...
GOSTEI 0
Tiago Rodrigues
30/10/2015
Vou estudar como se faz isso...obrigado!
GOSTEI 0
Fernando Vicari
30/10/2015
Boa noite Tiago,
Você pode utilizar subquery. Abaixo coloquei um código de exemplo, porém não testei.
Você pode utilizar subquery. Abaixo coloquei um código de exemplo, porém não testei.
SELECT 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
GOSTEI 0