Om du är på 11.2 istället för bara 11.1 kan du använda LISTAGG
aggregerad funktion
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Om du använder en tidigare version av Oracle kan du använda en av de andra Oracle-strängaggregationstekniker på Tim Halls sida. Före 11.2 skulle min personliga preferens vara att skapa en användardefinierad aggregerad funktion så att du kan sedan
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Om du däremot inte vill skapa en funktion kan du använda ROW_NUMBER och SYS_CONNECT_BY_PATH närmar sig även om det tenderar att bli lite svårare att följa
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