將多筆相同鍵值的欄位內容合併

將多筆相同鍵值的欄位內容合併

常常遇到這樣的問題,如何將相同鍵值的藍位內容值串接 ?
舉例來說 TableA 如下:

ID  Type   DESC
1    cpu     處理器
1    cpu     雙核心
1    cpu     800外頻 
2    HD      硬碟
2    HD      500G
2    HD      5400轉

希望將欄位內容串接並以【,】分隔,在 SQL Server 2005 可以利用 XML PATH 來將功能實作,如:

ID  Type   DESC
1    cpu     處理器,雙核心,800外頻
2    HD      硬碟,500G,5400轉

SELECT T1.id, T1.type,
(
  STUFF( (
           SELECT ',' + [DESC]
           FROM   @TABLEA T2
           WHERE  T2.id = T1.id
           FOR XML PATH('')
          ), 1, 1, ''
       )
) AS [DESC]
FROM @TABLEA T1
GROUP BY id, type

 

如果只是想單純地將欄位內容單純串接,則可以用下列做法:

ID  Type   DESC
1    cpu     處理器雙核心800外頻
2    HD      硬碟500G5400轉

SELECT T1.id, T1.type,
(
  SELECT [DESC] + ''
  FROM   @TABLEA T2
  WHERE  T2.id = T1.id
  FOR XML PATH('')
) AS [DESC]
FROM @TABLEA T1
GROUP BY id, type

 

如果是 SQL Server 2000 則請參考 Concatenate the values in a column in SQL Server 2000 and 2005 文章

關於 PATHSTUFF 用法則參考: