Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

valores de coluna em uma linha


Se você estiver no 11.2 em vez de apenas no 11.1, você pode usar o LISTAGG função agregada
SELECT listagg( interval, ',' ) 
         WITHIN GROUP( ORDER BY interval )
  FROM (SELECT DISTINCT range AS interval
          FROM table_name
         WHERE age = 62)

Se você estiver usando uma versão anterior do Oracle, poderá usar um dos outros Técnicas de agregação de strings da Oracle na página de Tim Hall. Antes de 11.2, minha preferência pessoal seria criar um definido pelo usuário função agregada para que você possa então
SELECT string_agg( interval )
  FROM (SELECT DISTINCT range AS interval
              FROM table_name
             WHERE age = 62)

Se você não quiser criar uma função, no entanto, você pode usar o Aproximação de ROW_NUMBER e SYS_CONNECT_BY_PATH embora isso tende a ficar um pouco mais 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