轉:SQL Server中將多行資料拼接為一行資料(一個字串)

wjiaoling136發表於2015-05-15

轉載連結: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 a
group 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 a
group by id
--第三種顯示結果
--1	aa,bb
--2	aaa,bbb,ccc


--典型應用
--AMD_GiftNew中獲取所有的管理員ID
select adminIds = stuff((select ','+cast(UserId as varchar) from MM_Users where RoleId = 1 and flag =0 for xml path('')),1,1,'')
--典型應用顯示結果
--3,27

 

相關文章