SqlServer多行合並為一行,用逗號隔開


數據准備

假設表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

 

參考資料:https://www.cnblogs.com/bdqczhl/p/11665818.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM