Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Spaltenwerte hintereinander

Wenn Sie nicht nur 11.1, sondern 11.2 verwenden, können Sie LISTAGG verwenden Aggregatfunktion

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

Wenn Sie eine frühere Version von Oracle verwenden, können Sie eine der anderen verwenden Techniken zur Aggregation von Oracle-Strings auf der Seite von Tim Hall. Vor 11.2 wäre es meine persönliche Präferenz, einen benutzerdefiniert zu erstellen Aggregatfunktion damit Sie dann

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

Wenn Sie jedoch keine Funktion erstellen möchten, können Sie den ROW_NUMBER und SYS_CONNECT_BY_PATH nähern sich obwohl das tendenziell etwas schwieriger zu befolgen ist

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