2009-02-10 90 views
4

是否有用於SQL Server的Implode類型函數?SQL Server 2000中的Implode類型函數?

我已經是一個列表(SQL Server表):

Apple 
Orange 
Pear 
Blueberry 

,我希望他們出來爲

Apple, Orange, Pear, Blueberry 

我希望能爲空格和逗號是可配置的但我總是可以替換它,如果它不是...

快速幫助,將不勝感激!

回答

10

有與此相關的已經在SO(搜索PIVOT或UNPIVOT或GROUP_CONCAT)一些問題,但對於SQL Server爲您所陳述的問題的簡單解決方案(使用可變串聯一招):

DECLARE @str AS varchar(MAX) 
DECLARE @separator AS varchar(50) 
SET @separator = ', ' -- Here's your configurable version 

SELECT @str = COALESCE(@str + @separator, '') + <column_name> 
FROM <table_name> 
ORDER BY <sort_order> 

當然,如果這是需要在每行的基礎上,你可以使用的UDF或really cool FOR XML

+0

謝謝!重複發帖,抱歉。我不知道在....下面搜索什麼。 – 2009-02-10 23:28:23

+1

我會告訴你一個祕密 - 你在Google上限制搜索到這個網站會更好。 http://www.google.com/search?q=site:stackoverflow.com+concatenate+sqlserver – 2009-02-11 01:56:50

2

我通常使用FOR XML PATH方法對於這一點,它爲行子查詢還有,只需

SELECT ', ' + <column_name> 
FROM <table_name> 
ORDER BY <sort_order> 
FOR XML PATH('') 

這會給你一個「」一開始你的列表,並以最快的方式來刪除
是使用的東西

SELECT STUFF((
     SELECT ', ' + <column_name> 
     FROM <table_name> 
     ORDER BY <sort_order> 
     FOR XML PATH('') 
    ),1,2,'')