Criar um campo somando pedidos e subtraindo pela qtd estoque

13/03/2015

0

Pessoal, primeiramente bom dia.
Estou com uma duvida, tenho esta query abaixo:

SELECT
a.cod_empresa
,a.cod_item
,c.den_item
,c.cod_unid_med
,a.prz_entrega
,sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
,d.qtd_liberada AS saldo_estoque

FROM ped_itens a

JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)

JOIN estoque d
ON(d.cod_empresa = a.cod_empresa)
AND(d.cod_item = a.cod_item)

JOIN grl_atr_ant_cri_massas_rev01 e
ON(e.cod_empresa = a.cod_empresa)
AND(e.cod_item = a.cod_item)

WHERE a.cod_empresa = '02'
AND (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'
AND c.ies_situacao = 'A'
AND c.ies_tip_item = 'F'
AND a.cod_item = '4559'

GROUP BY
a.cod_empresa
,a.cod_item
,c.den_item
,c.cod_unid_med
,a.prz_entrega
,saldo_estoque

order by c.den_item, a.prz_entrega



Que me traz esse resultado

[img]http://arquivo.devmedia.com.br/forum/imagem/402654-20150313-095122.jpg[/img]

Quero criar um campo que some os pedidos e subtraia pelo estoque, porém percebe que o estoque se repete, por existir prazos de entregas diferentes, porém preciso que aparece esse valor de estoque apenas uma vez só pois senão vai distorcer no resultado, como faço isto ?
Dagoberto Neto

Dagoberto Neto

Responder

Posts

16/03/2015

Dagoberto Neto

Olá, bom dia.
Por gentileza, alguém poderia me ajudar de como esta realizando esse procedimento ???
Responder

16/03/2015

Fernando C

pesquise sobre triggers
Responder

16/03/2015

Dagoberto Neto

Certo, Fernando.
Como sou um cara muito iniciante, realmente preciso me aprofundar cada vez mais, vou ler e vou estudar um pouco mais sobre triggers, porém você tem um exemplo parecido com o que eu preciso, pois as vezes vendo um exemplo as coisas fica mais simples, pois estava dando uma olhada em Triggers rapidamente e as explicações são muito técnicas se tiver algum exemplo parecido com o cenário acima que descrevi ficaria grato.

Abraços
Responder

16/03/2015

Marisiana Battistella

Neto, o select tem que retornar os prazos de entrega?

Se não tem necessidade de retornar o prazo de entrega, é só somar os valores da coluna saldos_pedidos e diminuir do valor de estoque.
Responder

17/03/2015

Dagoberto Neto

Marisiana, bom dia.
Preciso sim dos prazos de entrega, na verdade ele é primordial, sem eles eu até consegui fazer, mas necessito do mesmo. Tem alguma solução rs.
Responder

17/03/2015

Marisiana Battistella

Você vai listar esses dados em um relatório?
Responder

17/03/2015

Dagoberto Neto

Por enquanto não Marisiana, por enquanto vai ser SQL puro mesmo, mas nem imagino como fazer para o saldo_estoque não se repetir, pois ele se repetindo distorce o resultado, trágico rs
Responder

17/03/2015

Marisiana Battistella

Você só precisa trocar a ordem das colunas, e mesmo assim continuará repetindo, mas como está agrupado não vai mostrar informações erradas...
SELECT a.cod_empresa,
       a.cod_item,
       c.den_item,
       c.cod_unid_med,
       d.qtd_liberada AS saldo_estoque,
       a.prz_entrega,
       sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
FROM ped_itens a 
JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
JOIN estoque d
ON(d.cod_empresa = a.cod_empresa)
AND(d.cod_item = a.cod_item)
JOIN grl_atr_ant_cri_massas_rev01 e
ON(e.cod_empresa = a.cod_empresa)
AND(e.cod_item = a.cod_item)
WHERE a.cod_empresa = '02'
AND (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'
AND c.ies_situacao = 'A'
AND c.ies_tip_item = 'F'
AND a.cod_item = '4559'
GROUP BY a.cod_empresa,
       a.cod_item,
       c.den_item,
       c.cod_unid_med,
       d.qtd_liberada,
       a.prz_entrega
 

Até onde sei, essa é a forma mais correta de fazer.
Responder

17/03/2015

Dagoberto Neto

Então, mas eu precisava fazer algo tipo assim usando o exemplo acima.
somar o saldo de pedido que vai dar 1325 - 1325 pegando o valor do estoque apenas uma vez e não 3975 pois ta repetindo o valor do estoque entendeu precisava criar esta soma.
Responder

17/03/2015

Marisiana Battistella

Entendi...Você só não pode aplicar SUM no valor de estoque e deixar que calcule por data de pedido. Seria assim:
SELECT a.cod_empresa,
       a.cod_item,
       c.den_item,
       c.cod_unid_med,
       d.qtd_liberada AS saldo_estoque,
       a.prz_entrega,
       sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) as saldo_pedidos,
      (sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) -  d.qtd_liberada ) as saldo_pedidos_2
FROM ped_itens a 
JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
JOIN estoque d
ON(d.cod_empresa = a.cod_empresa)
AND(d.cod_item = a.cod_item)
JOIN grl_atr_ant_cri_massas_rev01 e
ON(e.cod_empresa = a.cod_empresa)
AND(e.cod_item = a.cod_item)
WHERE a.cod_empresa = '02'
AND (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'
AND c.ies_situacao = 'A'
AND c.ies_tip_item = 'F'
AND a.cod_item = '4559'
GROUP BY a.cod_empresa,
       a.cod_item,
       c.den_item,
       c.cod_unid_med,
       d.qtd_liberada,
       a.prz_entrega
Responder

17/03/2015

Dagoberto Neto

Não deu certo, distorceu o valor de uma olhada no resultado. O correto seria 0 da forma que eu gostaria que seria a soma dos pedidos 1025 - 1025 do estoque.


[img]http://arquivo.devmedia.com.br/forum/imagem/402654-20150317-122702.jpg[/img]
Responder

17/03/2015

Marcos P

Neto,

Voltando na sua questão original...

[img]http://arquivo.devmedia.com.br/forum/imagem/378439-20150317-180356.jpg[/img]

Quero criar um campo que some os pedidos e subtraia pelo estoque, porém percebe que o estoque se repete, por existir prazos de entregas diferentes, porém preciso que aparece esse valor de estoque apenas uma vez só pois senão vai distorcer no resultado, como faço isto ?

-------------------------

No seu exemplo da imagem, qual o resultado desejado em cada uma das três linhas selecionadas ?

Qual o nome da nova coluna e qual a regra de cálculo considerando as colunas existentes ?

Estou de saída agora, mas dou uma olhada na sua resposta na sequencia....

Aproveito para relatar minha perplexidade com o nível dos comentários do forum... o sujeito falar que para resolver isso aí você deveria estudar triggeres, na minha opinião, seria motivo dele ser banido do site. O gênio que fez esse comentário, poderia me explicar como qualquer tipo de trigger resolveria essa questão ?
Responder

18/03/2015

Dagoberto Neto

Bom dia Marcelo, tudo bem?

Vamos lá...
Olhando a imagem que postei note que tenho um mesmo item que se repete com prazos de entregas diferente, preciso do total da soma de pedidos ou seja 300+900+125 = 1325 correto, porém preciso subtrair pelo o que já tenho em estoque que no caso é 1325 apenas, porém o saldo de estoque acaba se repetindo pelo fato dos prazos de entregas serem diferente e distorcendo a soma de seu valor pois ele mostra 3 vezes o valor do estoque. Resumindo precisaria de um campo da seguinte forma saldo_Pedido(1325) - saldo_estoque(1325) = 0, ou senão quando o item for repetido aparecer apenas uma vez saldo_estoque, algo assim.

Grato até o momento.
Neto
Responder

18/03/2015

Marcos P

É Marcos, não Marcelo... ok ?!?

Seu exemplo é confuso, porque tanto o total de "saldos_pedidos" e o "saldo_estoque" tem o mesmo valor.

Preparei um outro set de dados, abaixo.

cod_item prz_entrega   saldo_pedidos saldo_estoque nova_coluna
-------- ------------- ------------- ------------- -------------
    4559    20/03/2015           500          1325
    4559    20/03/2015           100          1325
    4559    20/03/2015           450          1325  


Qual o nome do campo "nova_coluna" ?

Isso é importante, porque o nome pode dar uma ideia da definição do cálculo usado.

Qual o valor de "nova_coluna", para cada uma dessas três linhas ?

Fico no aguardo.
Responder

18/03/2015

Marcos P

Obviamente, que as datas são diferentes em "prz_entrega" !
Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar