3

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

没有名字
-- -----
1 罗尼
1 詹姆斯
1 艾比
2 山姆
2 威利
3 迈克

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

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

我正在使用 Oracle 10g,并且必须使用 SQL 而不是 PL/SQL 来实现它。有出路吗?

4

4 回答 4

4

在 11G 上很容易,可以使用 LISTAGG 功能,可惜在 10G 上不行

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

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

于 2013-06-26T06:48:43.603 回答
3

试试这个查询

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 演示

于 2013-06-26T06:43:32.607 回答
0

你可以使用 LISTAGG

在此处查看演示

于 2013-06-26T06:47:56.210 回答
0

试试这个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] 
于 2013-06-26T07:43:45.393 回答