Utilizando pivot nessa query de colunas dinâmicas

04/09/2020

0

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

Responder

Posts

04/09/2020

Emerson Nascimento

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

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

Aceitar