Utilizando pivot nessa query de colunas dinâmicas
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
Curtidas 0
Respostas
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