Trừ khi bạn đang sử dụng nó trong một thủ tục được lưu trữ để lưu đầu ra dưới dạng một mảng (hoặc tập hợp), một truy vấn với LISTAGG
phải đủ và cho cùng một đầu ra.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
Trong oracle, chúng ta không có hàm chuyển đổi đơn giản như array_agg
. Tuy nhiên, bạn có thể tạo loại tập hợp do người dùng xác định, sau đó sử dụng CAST
và COLLECT
các chức năng để chuyển đổi nó thành NESTED TABLE
để có được cùng một đầu ra mong muốn.
Đầu tiên, tạo một bộ sưu tập TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Bây giờ, việc chạy truy vấn này tương đương với việc sử dụng string_agg
hoặc LISTAGG
, mặc dù categories
là một mảng hoặc tập hợp , chứ không phải là một chuỗi.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |