Jeśli korzystasz z 11.2, a nie tylko 11.1, możesz użyć LISTAGG
funkcja agregująca
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Jeśli używasz wcześniejszej wersji Oracle, możesz użyć jednej z pozostałych Techniki agregacji ciągów Oracle na stronie Tima Halla. Przed wersją 11.2 moim osobistym upodobaniem byłoby utworzenie zdefiniowanej przez użytkownika funkcja agregująca dzięki czemu możesz wtedy
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Jeśli jednak nie chcesz tworzyć funkcji, możesz użyć Podejście ROW_NUMBER i SYS_CONNECT_BY_PATH choć jest to nieco trudniejsze do naśladowania
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