一尘不染

将SELECT的行折叠为字符串的最佳方法是什么?

sql

在SQL语句(或过程)中,我想将此表的行折叠为一个逗号分隔的字符串。

simpleTable

id  value
--  ----- 
1    "a"
2    "b"
3    "c"

收合至:

"a, b, c"

阅读 123

收藏
2021-03-17

共1个答案

一尘不染

您可以在查询中使用嵌入的“ 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及更高版本。

2021-03-17