Oracle
 sql >> Base de données >  >> RDS >> Oracle

valeurs de colonne dans une ligne

Si vous êtes sur 11.2 plutôt que seulement 11.1, vous pouvez utiliser le LISTAGG fonction d'agrégation

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

Si vous utilisez une version antérieure d'Oracle, vous pouvez utiliser l'un des autres Techniques d'agrégation de chaînes Oracle sur la page de Tim Hall. Avant 11.2, ma préférence personnelle serait de créer un défini par l'utilisateur fonction d'agrégation afin que vous puissiez ensuite

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

Cependant, si vous ne souhaitez pas créer de fonction, vous pouvez utiliser Approche ROW_NUMBER et SYS_CONNECT_BY_PATH bien que cela ait tendance à devenir un peu plus difficile à suivre

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