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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)