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