SQL SERVER 合并重复行,行列转换(sql server2000 里面如何实现oracle10g的 wmsys.wm_concat() 的功能?)

来源:互联网 发布:android 7.0源码分析 编辑:程序博客网 时间:2024/05/22 03:45
sql server2000 里面如何实现oracle10g的 wmsys.wm_concat() 的功能?以及学习以下关键字:一、行列转换关键字PIVOT与UNPIVOT的使用二、OUTER APPLY
----乌龟代码---合并列值--*******************************************************************************************表结构,数据如下:id    value----- ------ 1    aa1    bb2    aaa2    bbb2    ccc需要得到结果:id    values ------ ----------- 1      aa,bb2      aaa,bbb,ccc即:group by id, 求 value 的和(字符串相加)1. 旧的解决方法(在sql server 2000中只能用函数解决。)--=============================================================================create table tb(id int, value varchar(10))insert into tb values(1, 'aa')insert into tb values(1, 'bb')insert into tb values(2, 'aaa')insert into tb values(2, 'bbb')insert into tb values(2, 'ccc')go --1. 创建处理函数 CREATE FUNCTION dbo.f_strUnite(@id int)RETURNS varchar(8000)AS BEGIN     DECLARE @str varchar(8000)    SET @str = ''     SELECT @str = @str + ',' + value FROM tb WHERE id=@id     RETURN STUFF(@str, 1, 1, '')END GO -- 调用函数 SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY iddrop table tbdrop function dbo.f_strUnitego--===================================================================================2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)create table tb(id int, value varchar(10))insert into tb values(1, 'aa')insert into tb values(1, 'bb')insert into tb values(2, 'aaa')insert into tb values(2, 'bbb')insert into tb values(2, 'ccc')go -- 查询处理 SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(        SELECT [values]= STUFF(REPLACE(REPLACE(            (                SELECT value FROM tb N                WHERE id = A.id                FOR XML AUTO            ), ' <N value="', ','), '"/>', ''), 1, 1, ''))Ndrop table tb--SQL2005中的方法2 create table tb(id int, value varchar(10))insert into tb values(1, 'aa')insert into tb values(1, 'bb')insert into tb values(2, 'aaa')insert into tb values(2, 'bbb')insert into tb values(2, 'ccc')go select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')from tbgroup by iddrop table tb



参考资料:http://www.cnblogs.com/love-summer/archive/2012/03/27/2419778.html

原创粉丝点击