相关疑难解决方法(0)

如何将多行组合到Oracle中以逗号分隔的列表中?

我有一个简单的查询:

select * from countries
Run Code Online (Sandbox Code Playgroud)

结果如下:

country_name
------------
Albania
Andorra
Antigua
.....
Run Code Online (Sandbox Code Playgroud)

我想在一行中返回结果,所以像这样:

Albania, Andorra, Antigua, ...
Run Code Online (Sandbox Code Playgroud)

当然,我可以编写一个PL/SQL函数来完成这项工作(我已经在Oracle 10g中完成了),但是对于这个任务是否有更好的,最好是非特定于Oracle的解决方案(或者可能是内置函数) ?

我通常会用它来避免子查询中的多行,所以如果一个人有一个以上的公民身份,我不希望她/他在列表中是重复的.

我的问题是基于SQL Server 2005上的类似问题.

更新:我的功能如下:

CREATE OR REPLACE FUNCTION APPEND_FIELD (sqlstr in varchar2, sep in varchar2 ) return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
     OPEN rec FOR sqlstr;
     LOOP
         FETCH rec INTO field;
         EXIT WHEN rec%NOTFOUND;
         ret := ret || field || sep;
     END LOOP;
     if length(ret) …
Run Code Online (Sandbox Code Playgroud)

sql oracle pivot concatenation string-aggregation

101
推荐指数
5
解决办法
38万
查看次数

将子查询中的多个结果合并为一个逗号分隔值

我有两张桌子:

TableA
------
ID,
Name

TableB
------
ID,
SomeColumn,
TableA_ID (FK for TableA)
Run Code Online (Sandbox Code Playgroud)

这种关系是一排TableA- 许多TableB.

现在,我希望看到这样的结果:

ID     Name      SomeColumn

1.     ABC       X, Y, Z (these are three different rows)
2.     MNO       R, S
Run Code Online (Sandbox Code Playgroud)

这不起作用(子查询中有多个结果):

SELECT ID,
       Name, 
       (SELECT SomeColumn FROM TableB WHERE F_ID=TableA.ID)
FROM TableA
Run Code Online (Sandbox Code Playgroud)

如果我在客户端进行处理,这是一个微不足道的问题.但这意味着我必须在每个页面上运行X查询,其中X是结果的数量TableA.

请注意,我不能简单地执行GROUP BY或类似的操作,因为它将为行返回多个结果TableA.

我不确定使用COALESCE或类似东西的UDF是否可行?

t-sql sql-server join

80
推荐指数
4
解决办法
14万
查看次数

是否存在将多行聚合为一行的Oracle SQL查询?

我有一个看起来像这样的表:

A 1 
A 2 
B 1 
B 2
Run Code Online (Sandbox Code Playgroud)

我想生成一个如下所示的结果集:

A 1 2 
B 1 2
Run Code Online (Sandbox Code Playgroud)

是否有SQL语句可以执行此操作?我正在使用Oracle.

相关问题:

sql oracle string-concatenation aggregation

31
推荐指数
5
解决办法
8万
查看次数

ORACLE SQL listagg函数

我不确定这里发生了什么,主要是因为我从未使用过这个函数,但是当我在Oracle 11g数据库上使用listagg函数时,它给了我一个未找到的ORA-00923 FROM关键字.

这是我的SQL

SELECT  cdm.courses_id,cde.additional_resources, listagg (dm.delivery_method_desc, ',')
WITHIN GROUP (ORDER BY dm.delivery_method_desc) delivery_methods
FROM    tablespace.course_de_delivery_methods cdm,
      tablespace.course_distance_ed cde,
      tablespace.delivery_methods dm
WHERE   cdm.courses_id = cde.courses_id
AND   cdm.delivery_methods_id = dm.delivery_methods_id
GROUP BY cdm.courses_id
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这会破裂.我是按照这里的例子来做的.

sql oracle ora-00923

8
推荐指数
1
解决办法
9113
查看次数