LISTAGG YAN YANA

SELECT PERSONEL_ID, LTRIM(LISTAGG(PERIOD, ‘,’) WITHIN GROUP (ORDER BY PERIOD),’,’) PERIODS
FROM PERSONEL_INF0
WHERE PERSONEL_ID =317
AND CREATED_TIMESTAMP >= sysdate-100
GROUP BY PERSONEL_ID
ORDER BY PERSONEL_ID;

PERSONEL_ID PERIODS
——– —-
1 David
1 John
1 Alan
1 David
2 Julie
2 Charles
And I want the following result:

PERSONEL_ID PERIODS
——– —–
1 ‘Alan, David, John’
2 ‘Charles, Julie’

======================= ** 2 ** =========================

with my_tabe as
(
select ‘M01’ as scycle, ‘1’ as sdate from dual union
select ‘M01’ as scycle, ‘2’ as sdate from dual union
select ‘M02’ as scycle, ‘1’ as sdate from dual
)
select scycle, ltrim(sys_connect_by_path(sdate, ‘,’), ‘,’)
from
(
select distinct sdate,
scycle,
count(1) over (partition by scycle) as cnt,
row_number() over (partition by scycle order by sdate) as rn
from my_tabe
)
where rn = cnt
start with rn = 1
connect by prior rn + 1 = rn
and prior scycle = scycle

 

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s


%d blogcu bunu beğendi: