单个查询中有两个wm_concat

时间:2014-03-10 17:08:52

标签: oracle oracle10g

考虑如下表格 -

TABLE DB.TEMP_TABLE
------------------------------------------  
field1        field2           field3
------------------------------------------  
1             10                100  
1             20                200  
1             30                300  
1             40                400
2             10                100  
2             20                200    

我需要在field2的基础上连接field3field1。期望的结果应如下所示 -

DESIRED RESULT
------------------------------------------  
field1        field2           field3
------------------------------------------
1             10,20,30,40      100,200,300,400
2             10,20            100,200

我在此查询中使用的查询在下面给出 -

SELECT field1,
  wm_concat(field2),
  wm_concat(field3)
FROM temp_table
GROUP BY field1;

以下是我得到的结果 -

------------------------------------------  
field1        field2           field3
------------------------------------------
1             10,20,40,30      100,400,300,200
2             10,20            100,200

请建议我一个有效的查询,如果可能请解释这个行为。

我正在使用Oracle 10g并尝试使用xmlagg

2 个答案:

答案 0 :(得分:1)

Oracle未记录/支持

wm_concat,因此无法保证将来会出现这种情况。您可以使用子查询。如果您更喜欢使用函数,则可以创建自己的函数并使用它类似于wm_concatCheck this link

答案 1 :(得分:1)

您可以使用SYS_CONNECT_BY_PATH或XMLAGG作为WM_CONCAT的替代(不支持)。在Oracle论坛讨论here中可以找到SYS_CONNECT_BY_PATH的示例。我使用XMLAGG here创建了一个SQL小提琴。

此外,如果需要以特定顺序连接的值,可以使用ORDER BY子句(如示例所示)。

参考文献:

LISTAGG alternative in 10g

Related Question on SO