PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Odpowiednik array_agg PostgreSQL w Oracle XE 11.2

Chyba że używasz go w procedurze składowanej, aby zapisać wynik jako tablicę (lub kolekcję), zapytanie z LISTAGG powinno wystarczyć i dawać takie same wyniki.

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

W Oracle nie mamy prostej funkcji konwersji, takiej jak array_agg . Możesz jednak utworzyć typ kolekcji zdefiniowany przez użytkownika, a następnie użyć CAST i COLLECT funkcje do konwersji do NESTED TABLE aby uzyskać ten sam pożądany wynik.

Najpierw utwórz kolekcję TYPE .

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

Teraz uruchomienie tego zapytania jest równoważne użyciu string_agg lub LISTAGG , chociaż categories to tablica lub kolekcja , a nie ciąg.

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

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

DEMO



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql:błąd zduplikowanej wartości klucza narusza ograniczenie unikalności

  2. Złożony klucz podstawowy wymusza ograniczenia NOT NULL na zaangażowanych kolumnach

  3. FATAL:nie można uzyskać dostępu do pliku klucza prywatnego /etc/ssl/private/ssl-cert-snakeoil.key:Odmowa uprawnień

  4. Zabezpieczenia na poziomie rzędu za pomocą prisma i postgres

  5. Jak mogę wstawić wspólne dane do tabeli tymczasowej z różnych schematów?