Dificuldade com comando sql

04/01/2005

0

Já postei este mesmo tópico no forum delphi, se não é permitido isso me desculpe pois coloquei primeiro no delphi qdo deveria ter postado aqui!!!
Obrigado

Boa noite pessoal, desenvolvo um sistema para um hotel fazenda e Utilizando Delphi 7, Rave e Firebird. Porem estou tendo uma dificuldade em elaborar um comando sql, preciso fazer um relatorio de custo onde me apresente a descricao do produto, quantidade vendida, preço de custo, preço de venda e a margem de lucro que foi gerada

1º Cada cliente recebe um botton ´especie de moeda eletronica´, com seus dados e um valor ´R$ X,XX´ de credito para gastar.

2º É controlado o estoque de varios locais como:
restaurante, cozinha do hotel, frigobar, sorveteria, lanchonete... ao todo são 13 locais diferentes
Cada um destes locais tem um micro onde é feita a saida do produto como a cozinha, frigobar, estoque geral ´Alem do estoque de cada local tem um Estoque geral, que é onde ficar armazenado os produtos comprados e q ainda nao foram destribuidos para os respectivos locais´. E locais que é feita a venda como restaurante, sorveteria... Para controlar isto tudo foi criado um tabela chamada estoque onde cada local recebe um codigo, e outra tabela para cada local onde é armazenado produto e quantidade em estoque de cada local.

3º Qdo é feita uma venda é inserido na tabela vendas: cod_venda data e o codclient e na tabela intens_venda é inserido: coditens, codvenda, codprod, quantidade, valorunit e cod_estoque e em seguida dado baixa no estoque e debitado de seu botton a quantia gastada.

4º Cada vez que um produto é dado entrada no estoque geral o preço de custo dele pode variar, pois vc pode pegar uma promoção ou um almento.

Para quebrar o galho estava fazendo esta consulta em um IBClientDataSet, porem o preço de custo que esta pegando nesta consulta é o preço de venda multiplicado pela quantia de produtos vendidos. Oq não é correto! Qdo deveria pegar o preço de custo.
E tbm aparece o mesmo produto varias vezes de acordo como ele foi registrado na tabela intens_venda, oq não é correto tbm.

SELECT I.CODPROD, P.DESCRICAO, V.DATA, I.QUANTIDADE, I.CODVENDA, P.VALORUNIT, (P.VALORUNIT * I.QUANTIDADE) SOMA
FROM PRODUTOS P, ITENS_VENDA I, VENDAS V
WHERE (V.DATA >= :DATINI)
AND (V.DATA = :DATINI)
AND (DATA <=:DATFIM)
AND (I.CODPROD = P.CODPROD)
AND (I.COD_ESTOQUE = :COD )
AND (I.CODVENDA = V.CODVENDA)
group BY i.codprod, p.descricao, DATA
ORDER BY DATA, P.DESCRICAO

Oq preciso é o seguinte:
Qdo pedir este relatorio ele selecione o preço de custo do determinado produto vendido ´onde vai ter varios preço de custo cadastrado para cada produto´ nao sei como escolher um deles, ´ se faço a media, o maior valor, o menor, o ultimo cadastrado???´. e depois acrescentar junto a este codigo acima...

Não sei se consegui expressar oq necessito, se alguem puder me ajudar agradeço...


Obrigado


Dberlese

Dberlese

Responder

Posts

05/01/2005

Sremulador

você pode utilizar o distinct


Responder

05/01/2005

Dberlese

Nunca usei ´distinct´ poderia dar um exemplo?

Obrigado!


Responder

05/01/2005

Dberlese

colocando desta meneira não funciona correto!!!

SELECT distinct I.CODPROD, P.DESCRICAO, i.quantidade, p.valorunit, (P.VALORUNIT * I.QUANTIDADE) SOMA, DATA
FROM PRODUTOS P, ITENS_VENDA I, VENDAS V
WHERE (i.codprod = 1)
and (DATA >= ´23.12.2004´)
AND (DATA <= ´24.12.2004´)
AND (I.CODPROD = P.CODPROD)
AND (I.COD_ESTOQUE = 2)
and (i.codvenda = v.codvenda)
ORDER BY DATA, DESCRICAO


Responder

05/01/2005

Dberlese

colocando desta meneira não funciona correto!!! SELECT distinct I.CODPROD, P.DESCRICAO, i.quantidade, p.valorunit, (P.VALORUNIT * I.QUANTIDADE) SOMA, DATA FROM PRODUTOS P, ITENS_VENDA I, VENDAS V WHERE (i.codprod = 1) and (DATA >= ´23.12.2004´) AND (DATA <= ´24.12.2004´) AND (I.CODPROD = P.CODPROD) AND (I.COD_ESTOQUE = 2) and (i.codvenda = v.codvenda) ORDER BY DATA, DESCRICAO


Expressei minha duvida em um momento de apavoro ficando a mesma muito complexa, depois com mais calma postei a de maneira mais simples e menos complexa onde consegui uma solução rapida e eficaz.
Para o caso de alguem cheguar a ter esta mesma duvida, estarei postando um exemplo de como foi resolvido o problema pelo nosso amigo emerson.en

select i.codprod, max(p.descricao), sum(i.quantidade) qtd,
(sum(i.quantidade) * max(i.vlunit)) valortotal
from itens_venda i
left join produtos p on (p.codprod=i.codprod)
group by i.codprod

Obrigado, Danilo


Responder

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

Aceitar