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

Еквивалент на array_agg на PostgreSQL в Oracle XE 11.2

Освен ако не го използвате в съхранена процедура, за да запазите изхода като масив (или колекция), заявка с LISTAGG трябва да е достатъчно и да дава същия резултат.

select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;

В Oracle нямаме проста функция за преобразуване като array_agg . Можете обаче да създадете дефиниран от потребителя тип колекция, след което да използвате CAST и COLLECT функции, за да го преобразувате в NESTED TABLE за да получите същия желан резултат.

Първо създайте колекция TYPE .

create or replace TYPE categorytype as TABLE OF VARCHAR2(20);

Сега изпълнението на тази заявка е еквивалентно на използването на string_agg или LISTAGG , въпреки че categories е масив или колекция , а не низ.

select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;

| ID | CATEGORIES |
|----|------------|
|  1 |  Cat1,Cat2 |
|  2 |  Cat3,Cat4 |

ДЕМО



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как се свързвате с база данни на Postgres без парола с помощта на pg-promise?

  2. Не може да се свърже с две бази данни на postgres в rails 3.2.

  3. Как да декодирате журналите за грешки на PostgreSQL

  4. Ляво-външно съединение в Postgres не връща стойности за Null

  5. QPSQL драйверът не е зареден Qt