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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM