建立逗号分隔列表?

pab*_*blo 17 sql t-sql sql-server csv

我正在尝试使用SQL来构建逗号分隔的cat_id列表

代码是:

declare     @output varchar(max)
set         @output = null;
select @output = COALESCE(@output + ', ', '') + convert(varchar(max),cat_id)
Run Code Online (Sandbox Code Playgroud)

编辑:将''更改为null,STILL相同.但是我得到的输出是这样的:

, 66 , 23
Run Code Online (Sandbox Code Playgroud)

领先的逗号不应该在那里.我错过了什么?

Mat*_*ton 54

你是SQL 2005吗?随着Rob Farley的道具最近向我展示了这个:

SELECT stuff((
    SELECT ', ' + cast(cat_id as varchar(max))
    FROM categories
    FOR XML PATH('')
    ), 1, 2, '');
Run Code Online (Sandbox Code Playgroud)

内部查询(带FOR XML PATH(''))选择以逗号分隔的类别ID列表,带有前导",".外部查询使用stuff函数删除前导逗号和空格.

我没有一个方便的SQL实例来测试它,所以它来自内存.您可能必须使用填充参数等,以使其按照您想要的方式工作.

  • 你在这里展示了这个疯狂的sql wizardy是什么!再见恶魔! (2认同)
  • 我想附加到此答案-对于许多STUFF语句,您希望参数为1和1,而不是1和2来创建真正的逗号分隔列表。Matt的答案使用2,因为他在每个逗号后都有一个空格。有关更多信息,请查看MSDN文章:http://msdn.microsoft.com/zh-cn/library/ms188043.aspx (2认同)