Fórum Media com AVG dando errado nas casas decimais #60055

27/07/2008

0

Olá não consigo fazer minha media dar certo com este select no firebird. O problema são as casas decimais. O que faço? Alguém sabe? Segue SQL abaixo:

SELECT ITENSVENDA.IDPRODUTO, PRODUTOS.DESCRICAO, AVG(ITENSVENDA.PRECOVENDA) AS PRECO,
SUM(ITENSVENDA.QTD) AS SOMADeQTD, VENDAS.idCLIENTE, clientes.nome from itensvenda
inner join produtos on (produtos.idproduto = itensvenda.idproduto)
inner join vendas on (itensvenda.nrvenda = vendas.nrvenda)
inner join clientes on (vendas.idcliente = clientes.idcliente)
WHERE (CAST (VENDAS.DATA AS DATE))>=:DATAINICIAL AND
(CAST (VENDAS.DATA AS DATE)) <=:DATAFINAL AND vendas.IDcliente<>-1
GROUP BY ITENSVENDA.IDPRODUTO, PRODUTOS.DESCRICAO,
vendas.IDcliente, clientes.nome ORDER BY 6, 2


Frostlost

Frostlost

Responder

Posts

28/07/2008

Gandalf.nho

Qual o problema exatamente? Arredondamento? O campo PRECOVENDA foi declarado como na tabela?


Responder

Gostei + 0

29/07/2008

Frostlost

O que acontecia era o seguinte, eu estava fazendo a média em cima do preço do produto. O que acontecia era que em determinadas linhas eram vendidos mais de um produto com o mesmo preço e o sql estava levando em consideração apenas 1 produto por linha. Resolvi então com este novo SQL:

SELECT ITENSVENDA.IDPRODUTO, PRODUTOS.DESCRICAO, SUM(ITENSVENDA.PRECOVENDA * ITENSVENDA.qtd) / SUM(ITENSVENDA.qtd) AS PRECO,
SUM(ITENSVENDA.QTD) AS SOMADeQTD, VENDAS.idCLIENTE, clientes.nome from itensvenda
inner join produtos on (produtos.idproduto = itensvenda.idproduto)
inner join vendas on (itensvenda.nrvenda = vendas.nrvenda)
inner join clientes on (vendas.idcliente = clientes.idcliente)
WHERE (CAST (VENDAS.DATA AS DATE))>=:DATAINICIAL AND
(CAST (VENDAS.DATA AS DATE)) <=:DATAFINAL AND vendas.IDcliente=:IDcliente
GROUP BY ITENSVENDA.IDPRODUTO, PRODUTOS.DESCRICAO,
vendas.IDcliente, clientes.nome ORDER BY 6, 2

Abraços a todos


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar