Si vous êtes sur 11.2 plutôt que seulement 11.1, vous pouvez utiliser le LISTAGG
fonction d'agrégation
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Si vous utilisez une version antérieure d'Oracle, vous pouvez utiliser l'un des autres Techniques d'agrégation de chaînes Oracle sur la page de Tim Hall. Avant 11.2, ma préférence personnelle serait de créer un défini par l'utilisateur fonction d'agrégation afin que vous puissiez ensuite
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Cependant, si vous ne souhaitez pas créer de fonction, vous pouvez utiliser Approche ROW_NUMBER et SYS_CONNECT_BY_PATH bien que cela ait tendance à devenir un peu plus difficile à suivre
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