SqlServer多行合并为一行,用逗号隔开 您所在的位置:网站首页 ue多行合并为一行 SqlServer多行合并为一行,用逗号隔开

SqlServer多行合并为一行,用逗号隔开

2024-07-09 01:30| 来源: 网络整理| 查看: 265

数据准备

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有