Select para retornar saldo do estoque em determinada data

Firebird

15/04/2009

Bom dia pessoal, preciso selecionar o saldo do meu estoque em determinada data, mas não estou conseguindo. O único select que consegui fazer até agora foi esse, mas preciso pegar o estoque do dia 31/03/2009. Do jeito que fiz estou pegando todos itens vendidos e todos itens comprados, alguém sabe como posso fazer? Segue sql abaixo:

 select distinct produtos.idproduto, produtos.descricao, produtos.qtdestoque,
sum( itensvenda.qtd) as qtdevendida, sum( itenscompra.qtd) as qtdecomprada
from produtos
   left join itenscompra on (produtos.idproduto = itenscompra.idproduto)
   left join compras on (itenscompra.nrcompra = compras.nrcompra)
   left join itensvenda on (produtos.idproduto = itensvenda.idproduto)
   left join vendas on (itensvenda.nrvenda = vendas.nrvenda)

group by produtos.idproduto, produtos.descricao, produtos.qtdestoque



Frostlost

Frostlost

Curtidas 0

Respostas

Frostlost

Frostlost

15/04/2009

Dei uma melhorada, mas agora preciso somar as quantidades com base numa restrição de uma data. Por exemplo, quero o estoque do dia 31/03/2009

select distinct produtos.idproduto, produtos.descricao, produtos.qtdestoque,
coalesce (sum (itensvenda.qtd), 0) as qtdevendida  ,  coalesce (sum( itenscompra.qtd),0) as qtdecomprada, (produtos.qtdestoque
+  coalesce (sum(itensvenda.qtd),0) - coalesce (sum(itenscompra.qtd),0)) as total
from produtos
   left join itenscompra on (produtos.idproduto = itenscompra.idproduto)
   left join compras on (itenscompra.nrcompra = compras.nrcompra)
   left join itensvenda on (produtos.idproduto = itensvenda.idproduto)
   left join vendas on (itensvenda.nrvenda = vendas.nrvenda)

group by produtos.idproduto, produtos.descricao, produtos.qtdestoque



GOSTEI 0
Frostlost

Frostlost

15/04/2009

Segue problema resolvido abaixo, com este SQL sempre vou conseguir o estoque relacionado a uma data passada por parâmetro. Fiquei muito orgulhoso de SQL, espero que ajude a comunidade, ou seja estou fazendo restrições no SUM usando IIF. O objetivo aqui é pegar o valor do estoque atual, subtrair as compras e adicionar as vendas que foram realizadas após a data passada por parâmetro.



select distinct produtos.idproduto, produtos.descricao, produtos.qtdestoque,
Sum( IIF( (CAST(VENDAS.DATA as DATE) > :DATAINICIAL AND VENDAS.SITUACAO <> ´CANCELADA´ AND
VENDAS.naturezadaoperacao <> ´REMESSA EM CONSIGNAÇÃO´), ITENSVENDA.QTD,  0) )  as QTDEVENDIDA,
Sum( IIF(      (COMPRAS.DATA         > :DATAINICIAL  AND COMPRAS.situacao = ´EFETIVADO´), ITENSCOMPRA.QTD, 0) )  as QTDECOMPRADA,

(produtos.qtdestoque +
Sum( IIF( (CAST(VENDAS.DATA as DATE) > :DATAINICIAL) AND VENDAS.SITUACAO <> ´CANCELADA´ AND
VENDAS.naturezadaoperacao <> ´REMESSA EM CONSIGNAÇÃO´, ITENSVENDA.QTD,  0) ) -
Sum( IIF(      (COMPRAS.DATA         > :DATAINICIAL AND COMPRAS.situacao = ´EFETIVADO´), ITENSCOMPRA.QTD, 0) )) as total
from produtos
   left join itenscompra on (produtos.idproduto = itenscompra.idproduto)
   left join compras on (itenscompra.nrcompra = compras.nrcompra)
   left join itensvenda on (produtos.idproduto = itensvenda.idproduto)
   left join vendas on (itensvenda.nrvenda = vendas.nrvenda)
   WHERE (PRODUTOS.qtdestoque > 0) AND (PRODUTOS.ATIVO = ´S´ or PRODUTOS.ATIVO IS NULL)
   AND (PRODUTOS.SERVICO = ´N´ or PRODUTOS.SERVICO IS NULL) AND (PRODUTOS.IMPRIMIR = ´S´ or PRODUTOS.IMPRIMIR IS NULL)

  group by produtos.idproduto, produtos.descricao, produtos.qtdestoque order by produtos.descricao




GOSTEI 0
POSTAR