我有一个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 |
演示
问题内容: 我想知道PostgreSQL中的数据类型等效吗? 问题答案: 根据文档,您好像是您的朋友,范围从-9223372036854775808到9223372036854775807。
问题内容: 我必须用最新的PostgreSQL替换Oracle驱动程序。PostgreSQL不知道函数LISTAGG。我必须将值用逗号分隔。PostgreSQL中Oracle函数的等效功能是什么? 问题答案: PostgreSQL中的等效功能是 string_agg :连接到字符串中的输入值,由定界符分隔 例如,在Apache Ofbiz 17.12.04中获取所有列表,然后用字符串表示它。
问题内容: 我有一张桌子,我想将每个ID与连接的字段值连接成一行。 例如,在我的表格中,我有以下内容: 我想输出: 在MySQL中,我能够使用聚合函数,但是在这里似乎不起作用… PostgreSQL是否具有等效功能,或者还有另一种方法可以实现此目的? 问题答案: 这可能是一个很好的起点(仅限8.4+版本): array_agg返回一个数组,但是您可以根据需要对其进行文本转换和编辑(请参见下面的说明
问题内容: 我正在尝试将一些JavaScript代码从MicrosoftAjax移到JQuery。我在MicrosoftAjax中使用了流行的.net方法中的JavaScript等效项,例如String.format(),String.startsWith()等。jQuery中是否具有等效项? 问题答案: ASP.NET AJAX的源代码可供您参考,因此您可以仔细阅读它,并将要继续使用的部分包含在
问题内容: 是否有类似Android上的内容。我知道如何创建自己的线程,但是有没有像摆动计时器那样的东西? 问题答案: 还有Java的TimerTask。这是我的代码中播放音频样本的示例:
问题内容: 我想知道是否有一种方法可以仅使用html在另一个html内包含一些html内容? 替代PHP 这可能吗? 编辑: 这引起了一些混乱,我需要的是“几乎是html标签”,该标签具有在另一个文档中包含html文档的功能。 问题答案: 它不能完全通过HTML来完成。(不过,有iframe,但在这种情况下我认为不符合要求。) 可以使用JavaScript来完成。您可以通过Ajax获得另一个文件,