Utilizando pivot nessa query de colunas dinâmicas

SQL

Banco de Dados

Oracle PL SQL

04/09/2020

Tenho a query abaixo onde exibo produtos, ordenados pelo código do produto, a data de movimentação do produto é da mais recente para a mais antiga, porém como que queria apenas as ultimas 5 datas de um período definido, utilizei rank, até aí tudo bem. Mas agora queria transformar a data em coluna e colocar sua respectiva quant. de movimentação abaixo dela. Porém ela é dinâmica, posso ter de 1 até 5 colunas. e essa linha de colunas de acordo com o cod do produto.. ex. primeira linha de colunas são as 5 datas do produto 1, as próxima linha de 5 colunas abaixo da anterior, as datas do produto 2 e assim sucessivamente.

SELECT *
FROM

(

SELECT  

 TB2.CD_CLASSE
 --,TB2.CD_ESTOQUE
 ,TB2.CD_PRODUTO
 ,TB2.DS_PRODUTO
 ,TB2.DH_MVTO_ESTOQUE
 ,TB2.QT_MOVIMENTACAO
 ,TB2.QT_ESTOQUE_ATUAL
 ,TB2.TP_CLASSIFICACAO_XYZ
 ,TB2.TP_CLASSIFICACAO_ABC,

 Dense_Rank () OVER (
    PARTITION BY TB2.CD_PRODUTO
    ORDER BY TB2.DH_MVTO_ESTOQUE DESC

 ) AS RANK_PROD

FROM

(

 SELECT DISTINCT 
 
 TB1.CD_CLASSE
,TB1.CD_PRODUTO
,TB1.DS_PRODUTO
,MVT_EST.DH_MVTO_ESTOQUE
,MVT_EST.QT_MOVIMENTACAO
,TB1.QT_ESTOQUE_ATUAL
,TB1.TP_CLASSIFICACAO_XYZ
,TB1.TP_CLASSIFICACAO_ABC

 FROM 
 
  ITMVTO_ESTOQUE MVT_EST,
 (

 SELECT DISTINCT 

 PROD.CD_CLASSE
,PROD.CD_PRODUTO
,PROD.DS_PRODUTO
,PROD.QT_ESTOQUE_ATUAL
,EMPROD.TP_CLASSIFICACAO_XYZ
,EMPROD.TP_CLASSIFICACAO_ABC
  
    
 FROM 

    PRODUTO PROD
   ,EMPRESA_PRODUTO EMPROD --TEM
   
  


 WHERE 

  PROD.CD_PRODUTO = EMPROD.CD_PRODUTO 
   
  

  ORDER BY PROD.CD_PRODUTO 
)TB1 
 
 WHERE
 
 TB1.CD_PRODUTO = MVT_EST.CD_PRODUTO AND
 MVT_EST.DH_MVTO_ESTOQUE BETWEEN TO_DATE ('20/05/2020', 'dd/mm/yyyy')
 AND TO_DATE ('20/07/2020', 'dd/mm/yyyy')

)TB2  
) 

WHERE RANK_PROD <= 5 
Marcus Vinícius

Marcus Vinícius

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

04/09/2020

acredito que nesse caso seja melhor utilizar stored procedures ou funcitons. acredito que não seja possível resolver diretamente numa instrução.
GOSTEI 0
POSTAR