Filtragem com data

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
leo.vedder
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 15 Jan 2020 8:13 am

Olá pessoal,

Sou novo aqui no fórum e também comecei a pouco tempo trabalhar com banco de dados Oracle, gostaria de uma ajuda na seguinte situção:

Estou desenvolvendo um relatório personalizado em um sistema da empresa, onde o relatório principal falta a quantidade atual do produto no estoque, essa informação eu já possuo no relatório personalizado, o que me falta nesse caso é ficar assim:

Selecionar tudo

                              10/2019            11/2019             12/2019 
CD_PROD  DS_PROD   UNI_PROD   Qtd. Movimentada   Qtd. Movimentada    Qtd. Movimentada      Média Qtd     Qtd Atual Estoq.
001      Açúcar    Unidade       1                2                    3                     2             5
002      Café      Unidade                        1                    2                   1,5             4
003      Bolacha   Unidade       2                3                    1                     2             6
É um relatório que existe uma variável para exibir sempre os 3 últimos meses quando selecionado, faz a soma de todos os produtos movimentados em cada mês e exibe, é onde não consigo somar o que foi movimentado no mês par exibir neles, somente os meses.

Abaixo tenho o select do relatório:

Selecionar tudo

SELECT     IE.DH_MVTO_ESTOQUE,
                E.CD_ESPECIE,
                E.DS_ESPECIE,
                S.CD_SETOR,
                S.NM_SETOR,
                IE.CD_PRODUTO,
                P.DS_PRODUTO,
                UNI_PRO.DS_UNIDADE,
                ME.CD_ESTOQUE,
                E.DS_ESTOQUE,
                Sum(CASE
                ME.TP_MVTO_ESTOQUE
                WHEN 'D'
                THEN (IE.QT_MOVIMENTACAO * -1) * UNI_PRO.VL_FATOR
                WHEN 'C'
                THEN (IE.QT_MOVIMENTACAO * -1) * UNI_PRO.VL_FATOR
                WHEN 'N'
                THEN (IE.QT_MOVIMENTACAO * -1) * UNI_PRO.VL_FATOR
                ELSE IE.QT_MOVIMENTACAO * UNI_PRO.VL_FATOR
                END) QTD_MOVIMENTADA,
                fnc_mges_retorna_estoque_atual(ME.CD_ESTOQUE, IE.CD_PRODUTO) ESTOQUE_ATUAL

FROM        DBAMV.ITMVTO_ESTOQUE IE

JOIN          DBAMV.MVTO_ESTOQUE ME ON IE.CD_MVTO_ESTOQUE = ME.CD_MVTO_ESTOQUE
JOIN          DBAMV.PRODUTO P ON IE.CD_PRODUTO = P.CD_PRODUTO
JOIN          DBAMV.ESPECIE E ON P.CD_ESPECIE = E.CD_ESPECIE
JOIN          DBAMV.SETOR S ON ME.CD_SETOR = S.CD_SETOR
JOIN          DBAMV.UNI_PRO ON IE.CD_UNI_PRO = UNI_PRO.CD_UNI_PRO
JOIN          DBAMV.ESTOQUE E ON ME.CD_ESTOQUE = E.CD_ESTOQUE

WHERE       ME.TP_MVTO_ESTOQUE IN ('P', 'S', 'D', 'C', 'N', 'V')
AND           ME.CD_MULTI_EMPRESA = 2

GROUP BY  IE.DH_MVTO_ESTOQUE,
                 E.CD_ESPECIE,
                 E.DS_ESPECIE,
                 S.CD_SETOR,
                 S.NM_SETOR,
                 IE.CD_PRODUTO,
                 P.DS_PRODUTO,
                 UNI_PRO.DS_UNIDADE,
                 ME.CD_ESTOQUE,
                 E.DS_ESTOQUE

ORDER BY  S.CD_SETOR,
                 E.CD_ESPECIE,
                 IE.DH_MVTO_ESTOQUE,
                 IE.CD_PRODUTO,
                 E.DS_ESPECIE
Desculpem se ficou muito extensa a dúvida, porque no sistema de relatório personalizado utilizamos um report que também faz select, mas criamos views para facilitar.

Obrigado.
leo.vedder
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 15 Jan 2020 8:13 am

Acabou ficando bagunçado a explicação da exibição do relatório, seria no caso:

10/20019
prod 2

11/2019
prod 4

12/2019
prod 3

exibir no mês a soma de todas as movimentações que cada produto fez no mês.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Isso é perfeitamente possível de se fazer.
Antigamente era chamado de CROSSTAB. Aqui tem um exemplo de como era feito quando não se tinha uma função ou relatórios pra isso:
http://glufke.net/oracle/viewtopic.php?t=1651

Com o avanço do Oracle, eles criaram o PIVOT.
Veja:

Selecionar tudo

SQL> SELECT job, deptno, sal from emp;

JOB       DEPTNO       SAL
--------- ------ ---------
PRESIDENT     10   5000.00
MANAGER       30   2850.00
MANAGER       10   2450.00
MANAGER       20   2975.00
ANALYST       20   3000.00
ANALYST       20   3000.00
CLERK         20    800.00
SALESMAN      30   1600.00
SALESMAN      30   1250.00
SALESMAN      30   1250.00
SALESMAN      30   1500.00
CLERK         20   1100.00
CLERK         30    950.00
CLERK         10   1300.00

14 rows selected

Agora o PIVOT:

Selecionar tudo

SQL> SELECT * FROM
  2  (
  3    SELECT job, deptno, sal
  4    FROM emp
  5  )
  6  PIVOT
  7  (
  8    sum(sal)
  9    FOR deptno IN (10, 20, 30)
 10  )
 11  order by job;

JOB               10         20         30
--------- ---------- ---------- ----------
ANALYST                    6000 
CLERK           1300       1900        950
MANAGER         2450       2975       2850
PRESIDENT       5000            
SALESMAN                              5600

SQL> 
E é claro, existe ferramentas de relatório que fazem isso também.
:-o
leo.vedder
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 15 Jan 2020 8:13 am

Obrigado pelas dicas!!!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes