Jika Anda menggunakan 11.2 daripada hanya 11.1, Anda dapat menggunakan LISTAGG
fungsi agregat
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Jika Anda menggunakan Oracle versi sebelumnya, Anda dapat menggunakan salah satu Teknik agregasi string Oracle di halaman Tim Hall. Sebelum 11.2, preferensi pribadi saya adalah membuat ditentukan pengguna fungsi agregat sehingga Anda dapat
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Namun, jika Anda tidak ingin membuat fungsi, Anda dapat menggunakan ROW_NUMBER dan SYS_CONNECT_BY_PATH pendekatan meskipun itu cenderung sedikit lebih sulit untuk diikuti
with x as (
SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62 )
select ltrim( max( sys_connect_by_path(interval, ','))
keep (dense_rank last order by curr),
',') range
from (select interval,
row_number() over (order by interval) as curr,
row_number() over (order by interval) -1 as prev
from x)
connect by prev = PRIOR curr
start with curr = 1