Oracle
 sql >> Database >  >> RDS >> Oracle

valori di colonna in una riga

Se sei su 11.2 anziché solo 11.1, puoi utilizzare il LISTAGG funzione aggregata

SELECT listagg( interval, ',' ) 
         WITHIN GROUP( ORDER BY interval )
  FROM (SELECT DISTINCT range AS interval
          FROM table_name
         WHERE age = 62)

Se stai utilizzando una versione precedente di Oracle, puoi utilizzare uno degli altri Tecniche di aggregazione di stringhe Oracle sulla pagina di Tim Hall. Prima della versione 11.2, la mia preferenza personale sarebbe stata quella di creare un definito dall'utente funzione aggregata in modo che tu possa allora

SELECT string_agg( interval )
  FROM (SELECT DISTINCT range AS interval
              FROM table_name
             WHERE age = 62)

Se non desideri creare una funzione, tuttavia, puoi utilizzare ROW_NUMBER e SYS_CONNECT_BY_PATH si avvicinano anche se tende a diventare un po' più difficile da seguire

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