码迷,mamicode.com
首页 > 数据库 > 详细

SQLServer 中多行数据合并成一行数据(一个字段)

时间:2019-10-13 12:37:20      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:脚本   需要   copy   value   toolbar   too   int   排除   null   

需求:有四行数据,如下:

  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,波罗

 

SQLServer 中多行数据合并成一行数据(一个字段)

标签:脚本   需要   copy   value   toolbar   too   int   排除   null   

原文地址:https://www.cnblogs.com/bdqczhl/p/11665818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!