SQL字符串聚合根据变量的位置返回不同的结果

时间:2016-03-28 22:39:47

标签: sql sql-server string-aggregation

我的代码:

2, 2, 2, 4,

返回DECLARE @CHARS VARCHAR(100) = '' SELECT @CHARS = ', ' + @CHARS + name -- <---CODE OF INTEREST FROM #t1 SELECT @CHARS 。一切都很好。

但是,当我更改上面的代码时,首先附加逗号和空格:

, , , , 2224

它返回, 2, 2, 2, 4。它不应该返回'<a http://localhost/users-data/activate/.php?id='.$id.'>' 吗?

1 个答案:

答案 0 :(得分:1)

第二个公式的逻辑是:对于每个记录,它将字符串附加到@CHARS的右侧

假设你有

insert into #t1 values (1,'2'), (6,'3'), (6,'4'), (1,'5')

使其更清晰

对于第一行,它返回", 2"

对于第二行,您@CHARS将为", " + ", 2" +&#34; 3&#34;

对于第三行,@ CHARS为", , 23"因此将@CHARS设置为", " + ", , 23" + "4"

尝试以下查询,了解正在进行的操作:

DECLARE @CHARS VARCHAR(100) = ''
SELECT top 1 @CHARS = ', ' + @CHARS + name -- <---CODE OF INTEREST
FROM #t1

print @CHARS
go

Result: , 2
--------------------------
DECLARE @CHARS VARCHAR(100) = ''
SELECT top 2 @CHARS = ', ' + @CHARS + name -- <---CODE OF INTEREST
FROM #t1

print @CHARS
go

Result: , , 23
----------------------
DECLARE @CHARS VARCHAR(100) = ''
SELECT top 3 @CHARS = ', ' + @CHARS + name -- <---CODE OF INTEREST
FROM #t1

print @CHARS
go
Result: , , , 234