GARANTIR DESCONTO

Fórum Consulta Muito Demorada com Left Join #51891

29/07/2005

0

Tenho a tabela PRODUTOS com os campos CODIGO e ATUAL. ATUAL é o campo onde gravo o saldo do estoque do produto. Tenho outra tabela MOV_ESTOQUE com os campos NR_SEQUENCIAL, PRODUTO(gravo o código do produto), OPERACAO(gravo ´E´ ou ´S´) e QUANTIDADE.
Como se pode ver são tabelas básicas de cadastro e movimento de produtos.
Minha dúvida/necessidade: preciso fazer um relatório que onde seja listado o CODIGO e saldo ATUAL de cada produto. Se fosse só isso seria simples, pois eu imprimiria apenas os dois campos (CODIGO e ATUAL) do cadastro de produtos. O problema é que preciso que esse saldo seja com posição em uma data determinada pelo usuário. Assim, tenho que pegar o saldo ATUAL do cadastro de produtos e somar as saídas(´S´) e diminuir as entradas(´E´) que foram feitas na tabela MOV_ESTOQUE após a data selecionada.
Minha dúvida é como montar a constula SQL.
Já tentei de várias formas e não dá certo. A única forma é que consegui foi a forma abaixo

´
SELECT P.CODIGO, P.DESCRICAO, P.UNIDADE, P.MARCA, P.ESTOQUEMINIMO, P.ATUAL, CASE ME.OPERACAO WHEN ´E´ THEN SUM (E.QUANTIDADE) END AS ENTRADAS, CASE ME.OPERACAO WHEN ´S´ THEN SUM(ME.QUANTIDADE) END AS SAIDAS FROM PRODUTOS P INNER JOIN MOVIESTOQUE ME ON (ME.PRODUTO = P.CODIGO AND ME.DATA >:VDataPosicao) P.CODIGO, P.DESCRICAO, P.UNIDADE, P.MARCA, P.ESTOQUEMINIMO, P.ATUAL
´

O problema é que essa consulta fica muito, mas muito demorada mesmo, tornando inviável dessa forma.

Já tentei o INNER em vez de LEFT, mas daí não mostra os produtos que não tiveram movimento no período.

Utilizo o Firebird 1.5. Se você conhece bem o esse BD, por gentileza, me ajude a fazer esse relatório. Se tiver qualquer dica que possa me dar uma luz, já seria bom.

Obriado.


Valdirdill

Valdirdill

Responder

Posts

03/08/2005

Agostinho

tente usar assim
SELECT P.CODIGO,
P.DESCRICAO,
P.UNIDADE,
P.MARCA,
P.ESTOQUEMINIMO,
P.ATUAL,
(select sum(quantidade) from movestoque where movestoque.produto = produto.codigo and movestoque.opercao = ´E´) as entradas
(select sum(quantidade) from movestoque where movestoque.produto = produto.codigo and movestoque.opercao = ´S´) as saidas
FROM PRODUTOS P


Responder

Gostei + 0

03/08/2005

Afarias

eu daria preferência a usar um stored procedure



T+


Responder

Gostei + 0

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

Aceitar