<分区>
我有一个 Oracle 11g XE 数据库,我有一个查询结果集:
ID Category
1 Cat1
1 Cat2
2 Cat3
2 Cat4
我想在同一行中获得所有相关类别的不同 id,像这样用逗号分隔
ID Categories
1 Cat1,Cat2
2 Cat3,Cat4
我以前使用过 Postgres,array_agg
在这方面帮助了我。如何在 Oracle 11g XE 中获得相同的结果?
<分区>
我有一个 Oracle 11g XE 数据库,我有一个查询结果集:
ID Category
1 Cat1
1 Cat2
2 Cat3
2 Cat4
我想在同一行中获得所有相关类别的不同 id,像这样用逗号分隔
ID Categories
1 Cat1,Cat2
2 Cat3,Cat4
我以前使用过 Postgres,array_agg
在这方面帮助了我。如何在 Oracle 11g XE 中获得相同的结果?
最佳答案
除非您在存储过程中使用它来将输出保存为数组(或集合),否则使用 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 |
关于sql - 相当于 Oracle XE 11.2 中 PostgreSQL 的 array_agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47856440/
相关文章:
sql - oracle(或任何关系)数据模型问题。有固定数量 child 的 parent ?
postgresql - docker-compose 有一些问题
java - 在 QueryContext Oracle 的数字 varchar 字段中附加前导零
mysql ,带有点分隔符的别名字段,如 postgresql
sql - 如何从 PostgreSQL 中的 sql 脚本导入外部 sql 脚本?
mysql - SQL : How do I sum all null values into another value of specific row?