Somar valores da coluna criada no PIVOT
30/12/2020
0
Bom, nessa query eu tenho que listar os produtos que saíram para consumo em um determinado período, e o quanto foi consumido de cada produto. Tenho o cód do produto, nome, data da movimentação, a quantidade que foi consumida e a quantidade em estoque (somatória de todos os estoques). Porém existe algumas considerações.. existem 2 tipos de saída de produto, a saída para paciente que é (P) e saída para setor que é (S), e isso encontra-se em tp_mvto_estoque. O (c) e (d) é devolução, uma de setor e outra de paciente.. O estoque atual já é a soma dos produtos em todos os estoques.. Porém preciso somar as duas saídas que são S e P e subtrair pela soma das devoluções que são C e D.. S+P-C+D, Tentei realizar um pivot para listar em colunas para realizar a soma e subtração mas sem sucesso, não consigo adicionar as colunas do pivot no select para realizar essas operações. Se tiver uma forma de fazer ou outra melhor, Agradeço. O banco de dados é ORACLE.
Saída do select: https://imgur.com/wsUYobj
Saída do select: https://imgur.com/wsUYobj
SELECT FROM ( SELECT TB1.CD_PRODUTO, TB1.DS_PRODUTO, TB1.TP_MVTO_ESTOQUE, TB1.QT_MOVIMENTACAO, TB1.DATA, TB1.ESTOQUE_ATUAL FROM ( SELECT ITMVT.CD_PRODUTO, PROD.DS_PRODUTO, MVT.TP_MVTO_ESTOQUE, ITMVT.QT_MOVIMENTACAO, To_Char(ITMVT.DH_MVTO_ESTOQUE,'MM') AS DATA, Sum(EP.QT_ESTOQUE_ATUAL) AS ESTOQUE_ATUAL FROM ITMVTO_ESTOQUE ITMVT, PRODUTO PROD, MVTO_ESTOQUE MVT, EST_PRO EP WHERE ITMVT.DH_MVTO_ESTOQUE BETWEEN To_Date ('19/12/2020 23:59:59','DD/MM/YYYY hh24:mi:ss') AND To_Date ('26/12/2020 23:59:59','DD/MM/YYYY hh24:mi:ss') AND PROD.CD_PRODUTO = ITMVT.CD_PRODUTO AND PROD.CD_ESPECIE = 1 AND ITMVT.CD_MVTO_ESTOQUE = MVT.CD_MVTO_ESTOQUE AND MVT.TP_MVTO_ESTOQUE IN ('S','P','C','D') AND EP.CD_PRODUTO = ITMVT.CD_PRODUTO GROUP BY ITMVT.CD_PRODUTO, PROD.DS_PRODUTO, ITMVT.QT_MOVIMENTACAO, ITMVT.DH_MVTO_ESTOQUE, MVT.TP_MVTO_ESTOQUE ORDER BY ITMVT.CD_PRODUTO )TB1 ORDER BY TB1.CD_PRODUTO )TB2 PIVOT (Sum(QT_MOVIMENTACAO) FOR TP_MVTO_ESTOQUE IN ('S','P','C','D')) ORDER BY CD_PRODUTO
Marcus Vinícius
Curtir tópico
+ 0
Responder
Post mais votado
30/12/2020
deve ser algo assim:
você só precisa resolver o que realmente quer apresentar e, caso necessário, corrigir o agrupamento.
SELECT TB1.CD_PRODUTO, TB1.DS_PRODUTO, TB1.TP_MVTO_ESTOQUE, TB1.SAIDAS, TB1.DEVOLUCOES, TB1.DATA, TB1.ESTOQUE_ATUAL FROM ( SELECT ITMVT.CD_PRODUTO, PROD.DS_PRODUTO, MVT.TP_MVTO_ESTOQUE, SUM(CASE WHEN MVT.TP_MVTO_ESTOQUE IN ('S','P') THEN ITMVT.QT_MOVIMENTACAO ELSE 0 END) SAIDAS, SUM(CASE WHEN MVT.TP_MVTO_ESTOQUE IN ('C','D') THEN ITMVT.QT_MOVIMENTACAO ELSE 0 END) DEVOLUCOES, To_Char(ITMVT.DH_MVTO_ESTOQUE,'MM') AS DATA, EP.QT_ESTOQUE_ATUAL AS ESTOQUE_ATUAL FROM ITMVTO_ESTOQUE ITMVT INNER JOIN PRODUTO PROD ON PROD.CD_PRODUTO = ITMVT.CD_PRODUTO AND PROD.CD_ESPECIE = 1 INNER JOIN MVTO_ESTOQUE MVT ON MVT.CD_MVTO_ESTOQUE = ITMVT.CD_MVTO_ESTOQUE AND MVT.TP_MVTO_ESTOQUE IN ('S','P','C','D') INNER JOIN EST_PRO EP ON EP.CD_PRODUTO = ITMVT.CD_PRODUTO WHERE ITMVT.DH_MVTO_ESTOQUE BETWEEN To_Date ('19/12/2020 23:59:59','DD/MM/YYYY hh24:mi:ss') AND To_Date ('26/12/2020 23:59:59','DD/MM/YYYY hh24:mi:ss') GROUP BY ITMVT.CD_PRODUTO, PROD.DS_PRODUTO, ITMVT.DH_MVTO_ESTOQUE, EP.QT_ESTOQUE_ATUAL ) TB1
Emerson Nascimento
Responder
Mais Posts
30/12/2020
Marcus Vinícius
deve ser algo assim: Valeu mesmo cara, vou testar agora mesmo, deu uma olhada mais a fundo na sintaxe do pivot e consegui desenrolar.. porém agora com divergências na soma do estoque, vou dar uma olhada e qualquer coisa retorno aqui
você só precisa resolver o que realmente quer apresentar e, caso necessário, corrigir o agrupamento.
SELECT TB1.CD_PRODUTO, TB1.DS_PRODUTO, TB1.TP_MVTO_ESTOQUE, TB1.SAIDAS, TB1.DEVOLUCOES, TB1.DATA, TB1.ESTOQUE_ATUAL FROM ( SELECT ITMVT.CD_PRODUTO, PROD.DS_PRODUTO, MVT.TP_MVTO_ESTOQUE, SUM(CASE WHEN MVT.TP_MVTO_ESTOQUE IN ('S','P') THEN ITMVT.QT_MOVIMENTACAO ELSE 0 END) SAIDAS, SUM(CASE WHEN MVT.TP_MVTO_ESTOQUE IN ('C','D') THEN ITMVT.QT_MOVIMENTACAO ELSE 0 END) DEVOLUCOES, To_Char(ITMVT.DH_MVTO_ESTOQUE,'MM') AS DATA, EP.QT_ESTOQUE_ATUAL AS ESTOQUE_ATUAL FROM ITMVTO_ESTOQUE ITMVT INNER JOIN PRODUTO PROD ON PROD.CD_PRODUTO = ITMVT.CD_PRODUTO AND PROD.CD_ESPECIE = 1 INNER JOIN MVTO_ESTOQUE MVT ON MVT.CD_MVTO_ESTOQUE = ITMVT.CD_MVTO_ESTOQUE AND MVT.TP_MVTO_ESTOQUE IN ('S','P','C','D') INNER JOIN EST_PRO EP ON EP.CD_PRODUTO = ITMVT.CD_PRODUTO WHERE ITMVT.DH_MVTO_ESTOQUE BETWEEN To_Date ('19/12/2020 23:59:59','DD/MM/YYYY hh24:mi:ss') AND To_Date ('26/12/2020 23:59:59','DD/MM/YYYY hh24:mi:ss') GROUP BY ITMVT.CD_PRODUTO, PROD.DS_PRODUTO, ITMVT.DH_MVTO_ESTOQUE, EP.QT_ESTOQUE_ATUAL ) TB1
Responder
Clique aqui para fazer login e interagir na Comunidade :)