Ir para conteúdo
Fórum Script Brasil
  • 0

Select para calcular o estoque


cezarhlima

Pergunta

Bom dia,

Eu tenho uma tabela de estoque, onde cada movimentação de estoque é diferenciada por operação, exemplo v e DC são operações que diminuirão o estoque, enquanto C e DV são operações que aumentarão o estoque, preciso montar um select que faça o cálculo somando todas as quantidades das operações C e DV diminuindo pela quantidade das operações V e DC, que seja separado por data, para que eu possa saber em quais datas o meu estoque ficou negativo.

Obs: Versão do PostgreSQL 8.2.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Esta consulta mostra a variação liquida de cada dia o que não é o saldo. É o saldo diário que você precisa? Se for seria muito mais fácil em uma versão mais nova. O 8.2 já não tem mais suporte.

select
    data,
    sum(C + DV) aumento,
    sum(V + DC) diminuicao,
    sum(C + DV - V - DC) variacao_liquida
from t
group by data
order by data

Link para o comentário
Compartilhar em outros sites

  • 0
Esta consulta mostra a variação liquida de cada dia o que não é o saldo. É o saldo diário que você precisa? Se for seria muito mais fácil em uma versão mais nova. O 8.2 já não tem mais suporte.

select
    data,
    sum(C + DV) aumento,
    sum(V + DC) diminuicao,
    sum(C + DV - V - DC) variacao_liquida
from t
group by data
order by data

Eu preciso da total de cada dia, somando desde a data inicial de movimentação.

Exemplo:

01/11: 12C + 5DV -10V -2DC = 5 em estoque

02/11: 5EI + 5C + 2DV - 7V - 7DC = -2

Para saber todos os dias em que o estoque ficou negativo.

Quanto a operacao ela é uma coluna da tabela de estoque, que pode ser C, DV, DC e V.

Link para o comentário
Compartilhar em outros sites

  • 0

Testei com esta tabela:

create table estoque (data date, operacao varchar(2), valor money);
insert into estoque (data, operacao, valor) values
('2012-01-01', 'C', 100),
('2012-01-01', 'V', 90),
('2012-01-03', 'DV', 20),
('2012-01-03', 'DC', 30),
('2012-01-05', 'V', 10),
('2012-01-05', 'C', 100),
('2012-01-06', 'DC', 120),
('2012-01-06', 'C', 10);
A consulta:
select
    data, aumento, diminuicao, variacao_liquida,
    coalesce(saldo_anterior, 0::money) + variacao_liquida saldo_atual
from (
    select
        data,
        sum(case when operacao in ('C', 'DV') then valor else 0::money end) aumento,
        sum(case when operacao in ('V', 'DC') then valor * -1 else 0::money end) diminuicao,
        sum(case when operacao in ('C', 'DV') then valor else valor * -1 end) variacao_liquida,
        (
            select
                sum(case when operacao in ('C', 'DV') then valor else valor * -1 end)
            from estoque e
            where data < estoque.data
        ) saldo_anterior
    from estoque
    group by data
) s
order by data
;
    data    | aumento | diminuicao | variacao_liquida | saldo_atual 
------------+---------+------------+------------------+-------------
 2012-01-01 | $100.00 |    -$90.00 |           $10.00 |      $10.00
 2012-01-03 |  $20.00 |    -$30.00 |          -$10.00 |       $0.00
 2012-01-05 | $100.00 |    -$10.00 |           $90.00 |      $90.00
 2012-01-06 |  $10.00 |   -$120.00 |         -$110.00 |     -$20.00

Para tabelas maiores vai ficar lento. Solução: Migrar para 9.2.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...