DENSE RANK i CASE dla Dat

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


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

0

Sprawa rozwiązana

Zostawiam dla potomnych.


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;


1 użytkowników online, w tym zalogowanych: 0, gości: 1