使用Coalesce为逗号分隔列表

lbr*_*him -1 sql sql-server coalesce

Coalesce will return the first non-null value among its arguments文件说.我也可以像下面这样使用它:

DECLARE @ColumnValue VARCHAR(MAX);
SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
FROM dbo.TableA
SELECT @ColumnValue
Run Code Online (Sandbox Code Playgroud)

根据我的理解,,输出列表的最前面应该有一个,因为从一开始就至少会有一个逗号作为参数传递.另外,如果我在第二个参数中加入一些值.它出现在最前面而不是,我预期的那样.

如果有人可以请我解释代码.我将非常感激.

Gor*_*off 6

你的理解是不正确的.

专注于表达:

SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
-------------------------------^XXXXXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

第一个参数COALESCE()@ColumnValue+','.这最初是NULL,因此它被替换为''.然后ColumnValue作为列表中的第一个元素.

你可能会想到:

SELECT @ColumnValue = COALESCE(@ColumnValue, '') + ',' + ColumnValue
Run Code Online (Sandbox Code Playgroud)


Lam*_*mak 6

你很困惑.既然起初@ColumnValueNULL,那么结果@ColumnValue + ','也是NULL,所以结果COALESCE(@ColumnValue+',','')''.这很容易测试:

DECLARE @ColumnValue VARCHAR(MAX);

SELECT COALESCE(@ColumnValue+',','')
Run Code Online (Sandbox Code Playgroud)