Oracle相当于SQL Server的STUFF函数?
Oracle是否有自己的SQL ServerOracle相当于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
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确实是最合适、最简单的方法!文档链接已更改:更新的文档链接。