Oracle 10g中的聚合字符串连接



我使用的是Oracle 10 g,我有一个类似的场景:

无姓名
-------
1罗尼
1詹姆斯
1阿比
2山姆
2威利
3迈克

我需要聚合和连接字符串(中间只有一个空格),以获得结果:

无姓名
-------
1 Rony James Aby
2 Sam Willy
3迈克

我使用的是Oracle10g,必须使用SQL而不是PL/SQL来实现它。有出路吗?

在11G上很容易,您可以使用LISTAGG函数,但遗憾的是,在10G 上无法使用

这里有一些早期版本的技术,但它们确实需要编写一个函数。

http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php

尝试此查询

select No  , rtrim(Name,',') Name
   from ( select No , Name , rn from yourtable
           model
  partition by (No)
  dimension by (row_number() over
 (partition by No order by Name) rn
 )
 measures  (cast(Name as varchar2(40)) Name)
   rules
 ( Name[any] order by rn desc = Name[cv()]||' '||Name[cv()+1]
   )
  )
    where rn = 1
    order by NO

这是您的sql演示

您可以使用LISTAGG

请参阅此处的演示

尝试此SQL查询

SELECT 
  [No],
  STUFF((
    SELECT ' ' + Name
    FROM #tbl_concat 
    WHERE ([No] = Results.[No]) 
    FOR XML PATH (''))
  ,1,0,'') AS NameValues
FROM #tbl_concat Results
GROUP BY [No] 

最新更新