当前位置: 代码迷 >> SQL >> 转:SQL Server中将多行数据拼凑为一行数据(一个字符串)
  详细解决方案

转:SQL Server中将多行数据拼凑为一行数据(一个字符串)

热度:44   发布时间:2016-05-05 10:25:22.0
转:SQL Server中将多行数据拼接为一行数据(一个字符串)

转载链接:http://blog.csdn.net/kula_dkj/article/details/8568599

?

方法一: 使用T-SQL

 DECLARE @Users NVARCHAR(MAX);SET @Users = '';SELECT @Users = @Users + ',' + UserName FROM dbo.[User];WHERE RoleID = 1;SELECT @Users;
?转载自:http://www.fengfly.com/plus/view-172336-1.html

方法二:使用for xml path('') 和stuff

--使用 自连接、for xml path('')和stuff合并显示多行数据到一行中--注--1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。--2、for xml path('') 应该应用于语句的最后面,继而生成xml。--3、for xml path('root')中的path参数是生成的xml最顶级节点。--4、字段名或是别名将成为xml的子节点,对于没有列名(字段+'')或是没有别名的字段将直接显示。如[value] +','则是用,分隔的数据(aa,bb,)。--5、对于合并多行数据显示为一行数据时使用自连。--生成测试表并插入测试数据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, [val]=(select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as a--第一种显示结果--1	aa,bb,--1	aa,bb,--2	aaa,bbb,ccc,--2	aaa,bbb,ccc,--2	aaa,bbb,ccc,--第二种显示select id, [val]=(select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as agroup by id--第二种显示结果--1	aa,bb,--2	aaa,bbb,ccc,--第三种显示select id, [val]=stuff((select ','+[value] from tb as b where b.id = a.id for xml path('')),1,1,'') from tb as agroup by id--第三种显示结果--1	aa,bb--2	aaa,bbb,ccc--典型应用--AMD_GiftNew中获取所有的管理员IDselect adminIds = stuff((select ','+cast(UserId as varchar) from MM_Users where RoleId = 1 and flag =0 for xml path('')),1,1,'')--典型应用显示结果--3,27
?
  相关解决方案