建立一个逗号分隔的列表?建立一个逗号分隔的列表?(Building a comma separate

2019-05-12 05:06发布

我试着用SQL来建立一个逗号分隔CAT_ID的列表

代码如下:

declare     @output varchar(max)
set         @output = null;
select @output = COALESCE(@output + ', ', '') + convert(varchar(max),cat_id)

编辑:改变'为空,依然相同。 但输出即时得到是像这样:

, 66 , 23

领先的逗号不应该存在。 什么我错过了?

Answer 1:

您在SQL 2005? 随着道具罗布·法利谁发现我这个刚刚:

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

内部查询(用FOR XML PATH('')选择一个逗号分隔的类ID列表,拥有国内领先“”。 外部查询使用的东西,功能删除前导逗号和空格。

我没有方便的SQL实例来测试这一点,所以它从内存的。 你可能有东西参数等发挥得到它究竟要如何工作。



Answer 2:

COALESCE 返回它的参数中的第一个非空表达式

第一个参数@output + ', '永远不能为null(除非你初始化@output为NULL,并设置CONCAT_NULL_YIELDS_NULLON ),所以它总是返回。



Answer 3:

declare     @output varchar(max)

select      @output = coalesce
                      ( 
                          @output + ', ' + convert(varchar(max),cat_id), 
                          convert(varchar(max),cat_id)
                      )
from        yourTableHere

print       @output


Answer 4:

你初始化@output为空字符串? 如果它是一个空字符串COALESCE才会工作。



Answer 5:

你在做什么错是@output是不是从开始空,但空字符串。 设置@output为空循环之前(或者,如果它不使用,因为它宣布只是不为空字符串分配给它)。



Answer 6:

而有时...

你必须回答自己的问题

declare     @output varchar(max)
select      @output = case when (@output is null) then '' else ', ' END + convert(varchar(max),cat_id)


Answer 7:

检查@output只是这个查询的执行前值,我认为这不是等于NULL ,但为“”(空字符串)

编辑:(在@auth后编辑的问题)

现在我敢肯定它的“”,

你必须把它初始化为NULL

独立做的CONCAT_NULL_YIELDS_NULL ,使用旧的CASE WHEN

select @output = NULL
select @output = CASE WHEN @output IS NULL THEN '' ELSE @output+', ' END + value


Answer 8:

不知道这究竟适用于你在寻找什么,但我发现这种权利的同时,我发现你的问题。 我用FOR XML PATH第二溶液,将其马特汉密尔顿如上所述。 这对我来说真是棒极了。

串联行-卡尔P.安德森2009/10/14

http://www.sqlservercentral.com/articles/T-SQL/67973/



Answer 9:

/osp/install/idp/bin/sqlminus "select ri || ',' ||name|| ',' || numports || ',' || ascii(OVRONSET) from sdfctigw.ivrgrp where GRP_BEP is not null;" | sort -h
1,COMO INTERNAL 2,700,90
7,LOADIVR,10,80
10,SPEECH_IVR_PROD,600,95


文章来源: Building a comma separated list?