Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 一个查询中的两个wm_concat_Oracle_Oracle10g - Fatal编程技术网

Oracle 一个查询中的两个wm_concat

Oracle 一个查询中的两个wm_concat,oracle,oracle10g,Oracle,Oracle10g,考虑以下表格: TABLE DB.TEMP_TABLE ------------------------------------------ field1 field2 field3 ------------------------------------------ 1 10 100 1 20 200 1 30

考虑以下表格:

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    
我需要在
field1
的基础上连接
field2
field3
。期望的结果应该是这样的-

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

wm_concat
未被Oracle记录/支持,因此无法保证它将来会出现。您可以为此使用子查询。如果您喜欢使用函数,可以创建自己的函数,并使用类似于
wm_concat
的函数

您可以使用SYS_CONNECT_BY_PATH或XMLAGG作为WM_CONCAT的替代方案(不支持)。Oracle论坛讨论中提供了SYS_CONNECT_BY_PATH的示例。我使用XMLAGG创建了一个SQL FIDLE

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

参考资料:


正如我已经提到的,我也使用了
xmlagg
,但仍然得到相同的结果。好的,实现您自己的函数。我提到的链接为您完成了大部分工作。@RacilHilan
wm_concat
确实已从12c中删除。这有点令人惊讶,我认为现在的wm_concat是某种普通法的特征。@jonearles是的,你说得对,就像“普通法”一样,你不需要离婚来结束它;),这就是12c所做的。根据你的小提琴,字段总是被排序的。考虑诸如“代码> 1”、“20”、“300”/“代码>和<代码> 1×30×200 <代码>等条目。这种情况下的结果将是
1 | 20,30 | 200300
。所需的是
1 | 20,30 | 300200
。我知道你希望第三场和第二场的顺序相同。因此,我将fiddle()修改为按field2顺序排列field3。