SQL Server 2017新增了 string_agg函数,可以轻松实现分组合并字符串,而不是用xml path,或者写个自定义 函数来实现。
语法:
STRING_AGG ( expression, separator ) [ <order_clause> ]
<order_clause> ::=
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
有2个参数,第1个是要合并的字段、表达式,第2个是用什么分隔符,比如:用逗号作为分隔符。
后面的order 子句,是对要合并的数据进行排序,可以升序、降序。
一、建表
create table t
(
name varchar(10),
v varchar(20)
)
insert into t
select 'a','100' union all
select 'a','20' union all
select 'b','3' union all
select 'b','2' union all
select 'c','5'
二、合并字符串
代码如下,是不是很简单,so easy 。
select name,
string_agg(v,',') as vv
from t
group by name
/*
name vv
a 100,20
b 3,2
c 5
*/
上面例子中,name为a的,把v列合并成 100,20,如果要合并成20,100呢,如何实现?
select name,
string_agg(v,',') within group(order by cast(v as int)) as vv
from t
group by name
/*
name vv
a 20,100
b 2,3
c 5
*/
怎么样,是不是很简单。