首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

SQL Server FOR XML PATH 實戰:將多行資料合併為單一字串

     編輯:DB2 教學

SQL Server FOR XML PATH 實戰:將多行資料合併為單一字串

FOR XML PATH 是 SQL Server 中將多行結果合併為單一字串的經典技巧,常搭配 GROUP BY 使用,實現「分組拼接」需求。

範例資料

PersonInfo 表資料

PersonInfo 表結構

基本用法:子查詢 + FOR XML PATH('')

SELECT ClassID,
       COUNT(1) AS '超過22歲個數',
       (SELECT Name + ',' 
        FROM #PersonInfo 
        WHERE ClassID = p.ClassID 
        FOR XML PATH ('')) AS '姓名集合'
FROM #PersonInfo p
WHERE Sex = '男' AND Age > 22
GROUP BY ClassID
ORDER BY ClassID;

基本用法結果

進階:多欄位分組拼接

SELECT ClassID, Age,
       COUNT(1) AS '超過22歲個數',
       (SELECT Name + ',' 
        FROM #PersonInfo 
        WHERE ClassID = p.ClassID AND Age = p.Age 
        FOR XML PATH ('')) AS '姓名集合'
FROM #PersonInfo p
WHERE Sex = '男' AND Age > 22
GROUP BY ClassID, Age
ORDER BY ClassID;

多欄位分組結果

HAVING vs WHERE

嘗試用 HAVING Age > 22 替代 WHERE Age > 22,結果相同。但 HAVING 只能用於聚合函數過濾,非聚合條件建議寫在 WHERE,效能更好且語意清晰。

去除尾隨分隔符:STUFF 函數

SELECT ClassID,
       STUFF(
         (SELECT ',' + Name 
          FROM #PersonInfo 
          WHERE ClassID = p.ClassID 
          FOR XML PATH ('')), 
         1, 1, '') AS '姓名集合'
FROM #PersonInfo p
WHERE Sex = '男' AND Age > 22
GROUP BY ClassID;

STUFF 移除第一個分隔符,得到更乾淨的字串。

小結

FOR XML PATH('') 配合子查詢是 SQL Server 實現行轉列(字串聚合)的標準寫法,適用於報表匯出、資料轉換等場景。注意處理尾部分隔符與 NULL 值情況。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved