SQLServer 中多行数据合并成一行数据(一个字段)
2023-09-14 09:07:38 时间
需求:有四行数据,如下:
1.苹果
2.橘子
3.桃子
4.波罗
合并成一个字段:苹果,橘子,桃子,波罗;
需求明确之后,先弄点测试数据,上代码:
--创建一个临时表 Create table #temp ( testName varchar(20) ) --写入测试数据 INSERT INTO #temp(testName) values('苹果'); INSERT INTO #temp(testName) values('橘子'); INSERT INTO #temp(testName) values('桃子'); INSERT INTO #temp(testName) values('波罗'); --查询写入的数据 SELECT * FROM #temp --DELETE #temp
演示数据填充好了之后,我们可以有以下几种方法实现需求:
一:
DECLARE @listStr VARCHAR(MAX); SELECT @listStr = ISNULL(@listStr+',','')+ testName FROM #temp SELECT @listStr
在上面的脚本代码中,使用了ISNULL函数,也可以使用Coalesce函数,这两个函数都有空值情况下处理字符串的功能,更深层次的区别参考这里;
那么问题来了,我为什么要使用ISNull或者Coalesce 函数呢?这是因为所有的数据行中如果不排除有空值的可能,最好加上空值判断的处理,因为在SQLSERVER中,如果需要进行字符串拼接,遇到空值的话是无法拼接的。
二:使用for xml path('') 和stuff ;
SELECT ',' + testName FROM #temp for xml path('')
三:使用字符串函数 STRING_AGG,这个函数是SQLSERVER 2017 之后才有的。
SELECT STRING_AGG(ISNULL(testName,'N/A'), ',') FROM #temp
查询结果为:苹果,橘子,桃子,N/A,波罗
相关文章
- MS SQLServer相关自动化程序的问题汇总 (SQLServer每天定时输出EXCEL或xml的格式的问题等 )
- SQLserver不同数据库不同表之间的复制
- sqlserver 日期时间函数
- SQLServer · 最佳实践 · 透明数据加密TDE在SQLServer的应用
- C# 批量插入数据到SqlServer中的四种方式
- Power Designer 连接SqlServer 数据库 导出表结构
- PHP连接 SQLSERVER 注意事项(经典中的经典)
- 用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2
- sqlserver - 某字段数据为json串, 获取该json串里的值 的详细方法
- SQLServer 截取函数 substring函数
- springboot 通过 hibernate 连接sqlserver 空间数据 位置数据
- 请说明SQLServer中delete from tablea & truncate table tablea的区别
- 关于在Java中链接SQLServer数据库中失败的原因分析
- 解决navicat无法连接sqlserver数据库的问题