SQL Server 2017新增:string_agg函数(分组合并字符串)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yupeigu/article/details/79195437

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
*/


三、用order by子句,对要合并的字符串进行排序

上面例子中,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
*/
怎么样,是不是很简单。

猜你喜欢

转载自blog.csdn.net/yupeigu/article/details/79195437