SQLServer中多⾏数据合并成⼀⾏数据(⼀个字段)
需求:有四⾏数据,如下:
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
sql server拼接字符串函数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,波罗
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论