sql >> Base de Datos >  >> RDS >> Oracle

valores de columna en una fila

Si está en 11.2 en lugar de solo 11.1, puede usar LISTAGG función agregada

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

Si está utilizando una versión anterior de Oracle, puede utilizar uno de los otros Técnicas de agregación de cadenas de Oracle en la página de Tim Hall. Antes de 11.2, mi preferencia personal sería crear un definido por el usuario función agregada para que luego puedas

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

Sin embargo, si no desea crear una función, puede usar Aproximación a ROW_NUMBER y SYS_CONNECT_BY_PATH aunque eso tiende a ser un poco más difícil de seguir

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