加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver合并“id值相同”的列

发布时间:2020-12-12 14:25:24 所属栏目:MsSql教程 来源:网络整理
导读:sqlserver合并列值 合并列值 --******************************************************************************************* 表结构,数据如下: id??? value ----- ------ 1??? aa 1??? bb 2??? aaa 2??? bbb 2??? ccc 需要得到结果: id??? values ---

sqlserver合并列值

合并列值
--*******************************************************************************************
表结构,数据如下:
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 的和(字符串相加)

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
??? RETURN STUFF(@str,1,'')
END
GO
-- 调用函数
SELECt id,value = dbo.f_strUnite(id) FROM tb GROUP BY id
drop table tb
drop function dbo.f_strUnite
go
/*
id????????? value?????
----------- -----------
1????????? aa,bb
2????????? aaa,ccc
(所影响的行数为 2 行)
*/
--===================================================================================
2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
create table tb(id int,'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="',','),'"/>',''),'')
)N
drop table tb

/*
id????????? values
----------- -----------
1????????? aa,ccc

(2 行受影响)
*/

--SQL2005中的方法2
create table tb(id int,'ccc')
go

select id,[values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')),'')
from tb
group by id

/*
id????????? values
----------- --------------------
1????????? aa,ccc

(2 row(s) affected)

*/

drop table tb

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读