在SQL语句(或过程)中,我想将此表的行折叠为单个逗号分隔的字符串.
simpleTable
id value
-- -----
1 "a"
2 "b"
3 "c"
Run Code Online (Sandbox Code Playgroud)
折叠为:
"a, b, c"
Run Code Online (Sandbox Code Playgroud)
您可以在查询中使用嵌入式"set"语句进行连接:
declare @combined varchar(2000) select @combined = isnull(@combined + ', ','') + isnull(value,'') from simpleTable print @combined
(注意,第一个isnull()初始化字符串,第二个isnull()尤其重要,如果'value'列中有任何空值,否则单个null可能会消除整个串联)
(评论后编辑的代码和解释)
编辑(十年后):
SQL Server 2017引入了STRING_AGG()函数,该函数提供了连接不同行的字符串的官方方法.与其他聚合函数(如COUNT())一样,它可以与GROUP BY一起使用.
因此,对于上面的示例,您可以:
select string_agg(value, ', ')
from simpleTable
Run Code Online (Sandbox Code Playgroud)
如果您有其他列并且想要连接该列的值,则应添加"group by"子句,例如:
select someCategory, string_agg(value, ', ') as concatValues
from simpleTable
group by someCategory
Run Code Online (Sandbox Code Playgroud)
注意string_agg仅适用于SQL 2017及更高版本.
这只适用于MSSQL 2005+
select value + ',' from simpletable for xml path ('')
Run Code Online (Sandbox Code Playgroud)
..防止额外逗号的一种方法:
select case(row_number() over (order by id))
when 1 then value else ',' + value end
from simpletable
for xml path ('')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16141 次 |
| 最近记录: |