Wenn Sie nicht nur 11.1, sondern 11.2 verwenden, können Sie LISTAGG
verwenden Aggregatfunktion
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Wenn Sie eine frühere Version von Oracle verwenden, können Sie eine der anderen verwenden Techniken zur Aggregation von Oracle-Strings auf der Seite von Tim Hall. Vor 11.2 wäre es meine persönliche Präferenz, einen benutzerdefiniert zu erstellen Aggregatfunktion damit Sie dann
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Wenn Sie jedoch keine Funktion erstellen möchten, können Sie den ROW_NUMBER und SYS_CONNECT_BY_PATH nähern sich obwohl das tendenziell etwas schwieriger zu befolgen ist
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