Pokud používáte verzi 11.2 spíše než pouze 11.1, můžete použít LISTAGG
agregační funkce
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Pokud používáte dřívější verzi Oracle, můžete použít jednu z dalších Techniky agregace řetězců Oracle na stránce Tima Halla. Před verzí 11.2 bych osobně preferoval vytvoření uživatelsky definované agregační funkce abyste pak mohli
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Pokud však funkci vytvořit nechcete, můžete použít Přístup ROW_NUMBER a SYS_CONNECT_BY_PATH i když to má tendenci být trochu těžší sledovat
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