Oracle
 sql >> база данни >  >> RDS >> Oracle

стойности на колони в един ред

Ако сте на 11.2, а не само на 11.1, можете да използвате LISTAGG агрегатна функция

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

Ако използвате по-ранна версия на Oracle, можете да използвате някой от другите Техники за агрегиране на низове на Oracle на страницата на Тим Хол. Преди 11.2 моето лично предпочитание би било да създам дефиниран от потребителя агрегатна функция за да можете след това

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

Ако обаче не искате да създадете функция, можете да използвате ROW_NUMBER и SYS_CONNECT_BY_PATH подход въпреки че това обикновено става малко по-трудно за следване

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL/SQL:как да получите трасето на стека, името на пакета и името на процедурата

  2. Как да свържете хоризонтални стойности на таблица с вертикални стойности на друга таблица в базата данни на Oracle

  3. Как да се справя с изключение на курсора, когато заявката за избор върне нула записи

  4. Вътрешна функционалност на таблицата DUAL?

  5. Как може да се подобри тази заявка?