我有一个很长的查询,跨多个表,我将四个值连接为所有者(第一个,中间名和姓氏+组织)。所有其他列都是相同的,但是有多个所有者,因此,我想聚合多行。
我所看到的是(配对)
# Owner
1 Sam Smith, AAA
2 Stan Bird, BBB
2 Nancy Bird, BBB
3 Mike Owen, CCC
我希望看到的是
# Owner
1 Sam Smith, AAA
2 Stan Bird, Nancy Bird, BBB
3 Mike Owen, CCC
注意事项:
我尝试CASE(COLLECT...
,但这会导致我的联系失败:
错误 - “无法从套接字读取数据”
SysAdmin,不确定原因
我尝试过其他一些事情,没有运气。我当前的查询产生了所需的行数,但只是删掉了第二个所有者。
我不确定在这里发布整个查询是否明智。如果这有用,请告诉我。
更新2012-01-29
之前我错误地使用了wm_concat
,但是当我按照您展示的那样使用它时,我收到了这个错误:
ORA-06502: PL/SQL: numeric or value error: character string buffer too
small ORA-06512: at "WMSYS.WM_CONCAT_IMPL", line 30
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause:
*Action:
我相信可能会有一些更高层次的问题。我的系统管理员对“无法从套接字读取数据”问题没有答案。这可能是另一个。
我的SQL知识有限,而且由于查询的长度和复杂性,我似乎无法实现sys_connect_by_path
;完全是我自己的错。
对延迟回复感到抱歉。我被拉开以完成另一项任务。谢谢你的帮助。感谢ShadowWizard的赏金。
修改
以下是我在当前实例中使用wm_concat
的方法:
replace(cast(wm_concat(PERSON.MASTER_PERSON_FIRST_NAME || ' ' ||
PERSON.MASTER_PERSON_MIDDLE_INITIAL || ' ' ||
PERSON.MASTER_PERSON_LAST_NAME || ',' || ' ' ||
ORGANIZATION.MASTER_ORG_NAME) AS VARCHAR2(1000 BYTE)), ',', ', ') AS
"Owner(s)",
对不起,忘了把它包括在内。