2009-02-10 76 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,'')