DENSE RANK i CASE dla Dat

DENSE RANK i CASE dla Dat
BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 95
0

Mam mały problem.

Mam bazę zamówień które będą zrealizowane (WHERE DATA_REALIZACJI > SYSDATE)
Chciałbym wyciągnąć 3 kolejne daty wejścia materiału zaczynając od dzisiaj.

Potrafię wyciągnąć dane za pomocą DENSE_RANK i moje zapytanie wygląda następująco

Kopiuj

SELECT zam.MATERIAL,DENSE_RANK () over (PARTITION BY zam.MATERIAL ORDER BY zam.DATA_REALIZACJI ASC)xxx,zam.DATA_REALIZACJI
FROM OLAP_DANE.MV_SAP_ZAMOW zam

WHERE zam.DATA_REALIZACJI >= SYSDATE
AND zam.MATERIAL = '1101050012B58D933K'
ORDER BY zam.MATERIAL;

Chciałbym jednak uzyskać dane w kolejnych kolumnach a nie wierszach dla 3 następnych dostaw.

MATERIAL | Data 1 | Data 2 | Data 3
---------------- | -------------------
1101050012B58D933K | 18/06/29 | 18/07/02 | 18/07/30

BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 95
0

Sprawa rozwiązana

Zostawiam dla potomnych.

Kopiuj

select
material,

max((case when lp=1 then to_char(DATA_REALIZACJI,'yyyy.mm.dd') else ' ' end)) d1,
max((case when lp=2 then to_char(DATA_REALIZACJI,'yyyy.mm.dd') else ' ' end)) d2,
max((case when lp=3 then to_char(DATA_REALIZACJI,'yyyy.mm.dd') else ' ' end)) d3

from
(
select
zam.material,
zam.DATA_REALIZACJI,
RANK () OVER (PARTITION BY zam.MATERIAL ORDER BY zam.DATA_REALIZACJI) lp

FROM OLAP_DANE.MV_SAP_ZAMOW zam

WHERE zam.DATA_REALIZACJI >= SYSDATE
AND zam.MATERIAL = '1101050012B58D933K'
)
group by material
ORDER BY 1;


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.