在SQL语句(或过程)中,我想将此表的行折叠为一个逗号分隔的字符串。
simpleTable id value -- ----- 1 "a" 2 "b" 3 "c"
收合至:
"a, b, c"
您可以在查询中使用嵌入的“ set”语句进行连接:
声明@combined varchar(2000) 选择@combined = isull(@combined +',','')+ isull(value,'') 来自simpleTable 打印@combined
(请注意,第一个isnull()会初始化字符串,第二个isnull()在’value’列中有可能出现null的情况下尤其重要,因为否则单个null可能会抹掉整个串联)
(编辑后的代码和注释后的说明)
编辑(十年后):
SQL Server 2017引入了STRING_AGG()函数,该函数提供了一种连接不同行中字符串的正式方法。像COUNT()之类的其他聚合函数一样,它可以与GROUP BY一起使用。
因此,对于上面的示例,您可以执行以下操作:
select string_agg(value, ', ') from simpleTable
如果您还有其他列,并且想要串联该列的值,则可以添加“ group by”子句,例如:
select someCategory, string_agg(value, ', ') as concatValues from simpleTable group by someCategory
注意string_agg仅适用于SQL 2017及更高版本。