Hvis du er på 11.2 i stedet for kun 11.1, kan du bruge LISTAGG
aggregeret funktion
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Hvis du bruger en tidligere version af Oracle, kan du bruge en af de andre Oracle strengaggregeringsteknikker på Tim Halls side. Før 11.2 ville min personlige præference være at oprette en brugerdefineret aggregeret funktion så du kan derefter
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Hvis du ikke vil oprette en funktion, kan du dog bruge ROW_NUMBER og SYS_CONNECT_BY_PATH tilgang selvom det har en tendens til at blive lidt sværere at følge
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