Oracle相当于SQL Server的STUFF函数?

Oracle相当于SQL Server的STUFF函数?,oracle,select,Oracle,Select,Oracle是否有自己的SQL Serverstuff功能实现 Stuff允许您从多行选择中接收一个值。把我的情况考虑到 ID HOUSE_REF PERSON 1 A Dave 2 A John 3 B Bob 我想写一个select语句,但我希望人名在一行中 例如,当我从这个表中选择时,我希望实现以下目标 HOUSE_REF PERSONS A Dave, John B

Oracle是否有自己的SQL Server
stuff
功能实现

Stuff允许您从多行选择中接收一个值。把我的情况考虑到

 ID   HOUSE_REF   PERSON
 1      A         Dave
 2      A         John
 3      B         Bob
我想写一个select语句,但我希望
人名
在一行中

例如,当我从这个表中选择时,我希望实现以下目标

HOUSE_REF   PERSONS
A           Dave, John
B           Bob
到目前为止,我还没有找到一个简单的解决方案,可能需要编写自己的函数来使用,但我不完全确定如何处理这个问题,有什么想法吗

它的主要商业用途是有一个select语句来显示每所房子,并针对该房子有一个列来列出住在该房子里的每个人。此select中的house ref必须是唯一的,因此需要连接人员


谢谢

您可以编写一个自定义聚合函数来完成此操作。您生成的字符串限制为4k字符

有一个未记录且不受支持的函数
WMSYS.WM_CONCAT
执行相同的操作


Oracle 11.2包含了一个新功能来实现这一点

在此之前,您可以使用。

Oracle解决方案“无附加组件/无未记录的功能”(Tony提到的11.2之前)是:


执行以下三个功能

功能1

创建或替换类型stragg_type as 对象(字符串varchar2(4000)

静态函数 ODCIaggregate初始化 (sctx输入输出列型) 返回号码

成员函数ODCIaggregate (自进自出式, varchar2中的值 )返回号码

成员函数 二聚天冬氨酸 (自成列式, 返回值输出varchar2, 旗数 )返回号码

成员函数ODCIAggregateMerge (自进自出式, stragg_型ctx2 )返回号码)

/

功能2

创建或替换类型主体 stragg_类型为

静态函数 ODCIAggregateInitialize(sctx在 out stragg_类型)返回编号为 开始

结束

成员函数ODCIaggregate (自进自出式, varchar2)返回编号中的值为begin

self.string := self.string || ',' || value ;

return ODCIConst.Success;
returnValue := ltrim( self.string, ',' );

return ODCIConst.Success;
self.string := self.string || ctx2.string;

return ODCIConst.Success;
结束

成员函数 ODCIAggregateTerminate(自我
在stragg_类型中, 返回值输出varchar2, 数字中的标志)返回编号为begin

self.string := self.string || ',' || value ;

return ODCIConst.Success;
returnValue := ltrim( self.string, ',' );

return ODCIConst.Success;
self.string := self.string || ctx2.string;

return ODCIConst.Success;
结束

成员函数ODCIAggregateMerge
(自进自出式, ctx2为stragg_类型)返回编号为begin

self.string := self.string || ',' || value ;

return ODCIConst.Success;
returnValue := ltrim( self.string, ',' );

return ODCIConst.Success;
self.string := self.string || ctx2.string;

return ODCIConst.Success;
结束

结束/

功能3

创建或替换函数stragg( 输入varchar2)返回varchar2
确定性并行_启用
使用stragg_类型的骨料/


在执行了三个函数之后,现在您可以使用stragg,如下所示 示例表:emp名称|工资a
|100 a | 200 a | 300 b | 400 500摄氏度600摄氏度700华氏度
|八百

选择名称,STRAGG(薪水)作为 按名称来自emp组的字符串

输出:

a | 100200300

b | 400500

c | 600700

d | 800


您误解了T-SQL的
功能。请参阅文档:。它可以作为解决方案的一部分用于您尝试执行的操作,但它本身不是解决方案。与Oracle无关-但MySQL有一个名为GROUP_CONCAT的函数,似乎可以解决上述问题。Oracle 11gR2有一个Listag()功能:这应该归功于这个答案:使用Listag确实是最合适、最简单的方法!文档链接已更改:更新的文档链接。