Als je op 11.2 zit in plaats van alleen op 11.1, kun je de LISTAGG
. gebruiken geaggregeerde functie
SELECT listagg( interval, ',' )
WITHIN GROUP( ORDER BY interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Als u een eerdere versie van Oracle gebruikt, kunt u een van de andere gebruiken Aggregatietechnieken voor Oracle-tekenreeksen op de pagina van Tim Hall. Voorafgaand aan 11.2, zou mijn persoonlijke voorkeur zijn om een user-defined geaggregeerde functie zodat je dan
SELECT string_agg( interval )
FROM (SELECT DISTINCT range AS interval
FROM table_name
WHERE age = 62)
Als u echter geen functie wilt maken, kunt u de ROW_NUMBER en SYS_CONNECT_BY_PATH benadering hoewel dat meestal wat moeilijker te volgen is
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