串連同一列的資料值 (Concatenate the values in a column)

SQL# 串連同一列的資料值 #Concatenate the values in a column

如何將相同鍵值的藍位內容值串接 ?
舉例來說 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

 

SQL2000 必須寫function方式完成

create function Concat (@Col1 varchar(10))
returns varchar(1000)
as
begin
declare @resultStr varchar(1000)
select @resultStr = coalesce(@resultStr,'') + ','+ Col2 from StrConcat where col1 = @Col1
return stuff(@resultstr,1,1,'')
end

Select Col1,dbo.Concat(col1) from StrConcat
group by col1
order by col1