您的位置:首页 > 数据库 > Oracle

oracle 对字符串进行合并的聚集函数的使用

2014-07-29 14:24 330 查看
oracle数据库中,使用wm_concat(column)函数,可以进行字段合并,下文对该功能的实现方法作了详细的介绍,供您参考学习。

oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。

shopping:

-----------------------------------------

u_id       goods            num

------------------------------------------

1                苹果                2

2                 梨子               5

1                 西瓜               4

3                 葡萄               1

3                香蕉                1

1               橘子                 3

=======================

想要的结果为:

--------------------------------

u_id          goods_sum

____________________

1              苹果,西瓜,橘子

2              梨子

3              葡萄,香蕉

---------------------------------

想要的结果2:

--------------------------------

u_id          goods_sum

____________________

1              苹果(2斤),西瓜(4斤),橘子(3斤)

2              梨子(5斤)

3              葡萄(1斤),香蕉(1斤)

---------------------------------

使用oracle wm_concat(column)函数实现:

select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum
from shopping

4000
group by u_id
或者采用Oracle Listagg 函数。

Select a.u_id, listagg(a.g, ',') within Group(Order By a.u_id) As s
From (Select t.u_id, t.goods || '(' || t.num || ')' As g From test_table t) a
Group By a.u_id;

Listagg 函数用法具体介绍:http://blog.sina.com.cn/s/blog_4cef5c7b01016efp.html

MS SQL 实现方式:

MS SQL 需要 使用FOR XML PATH进行转换。

id    value
----- ------
1     aa
1     bb
2     aaa
2     bbb
2     ccc
需要得到结果:
id     values
------ -----------
1      aa,bb
2      aaa,bbb,ccc
即, group by id, 求 value 的和(字符串相加)

WITH    t1
AS ( SELECT   '1' AS id ,
'aa' AS value
UNION ALL
SELECT   '1' AS id ,
'bb' AS value
UNION ALL
SELECT   '2' AS id ,
'aaa' AS value
UNION ALL
SELECT   '2' AS id ,
'bbb' AS value
UNION ALL
SELECT   '2' AS id ,
'ccc' AS value
UNION ALL
SELECT   '1' AS id ,
'abc' AS value
)
--    SELECT  ',' + RTRIM(value) --AS value
--    FROM    t1
--FOR     --XML AUTO;
--        XML PATH('')
SELECT  id ,
STUFF(( SELECT  ',' + RTRIM(value)
FROM    t1
WHERE   id = a.id
FOR
XML PATH('')
), 1, 1, '') AS [values]
FROM    ( SELECT DISTINCT
id
FROM      t1
) a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息