从同一列聚合多个值作为连接字符串(10g)

时间:2013-01-16 13:15:44

标签: sql oracle10g aggregate

我有一个很长的查询,跨多个表,我将四个值连接为所有者(第一个,中间名和姓氏+组织)。所有其他列都是相同的,但是有多个所有者,因此,我想聚合多行。

我所看到的是(配对)

#     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

注意事项:

  • 我无法创建功能(缺少权限)
  • 使用Oracle 10g
  • 我尝试CASE(COLLECT...,但这会导致我的联系失败:

      

    错误 - “无法从套接字读取数据”

    SysAdmin,不确定原因

  • WM_CONCAT只是重复一个拥有者(有时是20次)并且没有给出所需的结果。

我尝试过其他一些事情,没有运气。我当前的查询产生了所需的行数,但只是删掉了第二个所有者。

我不确定在这里发布整个查询是否明智。如果这有用,请告诉我。


更新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)",

对不起,忘了把它包括在内。

0 个答案:

没有答案