數據准備
假設表Work有三個列分別ID,Name,Post(ID、名字、職位)
===========================
ID Name Post
1 張三 項目經理
2 李四 前端工程師
3 王五 GIS開發工程師
3 趙六 GIS開發工程師
一、聲明變量
1.將Work表Name字段,合並成一行 :張三,李四,王五,趙六
DECLARE @listStr VARCHAR(MAX); SELECT @listStr = ISNULL(@listStr+',','')+ Name FROM Work SELECT @listStr
二、使用for xml path('') 和stuff
1.將Work表中Name字段信息合並成一行,以逗號隔開 :張三,李四,王五,趙六
SELECT ',' + Name FROM Work for xml path('')
2.將Work表中職位相同的名字,合並成一行,以逗號隔開 :
項目經理 張三
前端工程師 李四
GIS開發工程師 王五,趙六
select post, name=STUFF((SELECT ','+work FROM Work t WHERE post=t1.post FOR XML PATH('')), 1, 1, '') from Work GROUP BY post
三、使用字符串函數 STRING_AGG,這個函數是SQLSERVER 2017 版本之后才有的
SELECT STRING_AGG(ISNULL(Name,'N/A'), ',') FROM Work
補充
如:將某張表的所有字段合並為一行,以逗號隔開: ID,Name,Post
SELECT name FROM SYSCOLUMNS WHERE ID=OBJECT_ID('DCTB') --查詢某表的字段
①
DECLARE @listStr VARCHAR(MAX); SELECT @listStr = ISNULL(@listStr+',','')+ name FROM SYSCOLUMNS WHERE ID=OBJECT_ID('DCTB') order by colorder SELECT @listStr
②
select id, name=STUFF((SELECT ','+name FROM SYSCOLUMNS t WHERE ID=OBJECT_ID('Work') order by colorder FOR XML PATH('')), 1, 1, '') from SYSCOLUMNS WHERE ID=OBJECT_ID('Work') GROUP BY id