-
用法
STRING_AGG() 是一个聚合函数,用于提取行中的所有表达式,并将这些表达式串联成一个字符串。 表达式值隐式转换为字符串类型,然后串联在一起。
-
语法
sql
STRING_AGG ( expression , separator ) [ <order_clause> ]
<order_clause> ::=
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
- 应用示例
sql
if object_id('ProdList','u') is not null drop table ProdList
go
create table ProdList (
商品名称 varchar(20)
,订单实收 decimal(19,6)
)
go
insert into ProdList
values
('烧烤',99)
,('烧烤',109)
,('火锅',89)
,('火锅',119)
,('冰淇淋',9.9)
go
--Output
select 商品名称,STRING_AGG(CONVERT(nVARCHaR(max),订单实收),',')
within group (order by 订单实收 asc) as CSV
from ProdList
group by 商品名称;

- 注意事项
适用于:SQL Server 2017 (14.x) 及以后版本
忽略 Null 值,并且不会添加相应的分隔符。
sql
if object_id('CourseSchedule ','u') is not null drop table Sales
go
create table CourseSchedule (
Name varchar(10)
, Course varchar(10)
)
go
insert into CourseSchedule
values
( 'Janne','语文')
,( 'Janne',null)
,( 'Mary' ,'数学')
,( 'Mary' ,'英语')
,( 'Jacky' ,null)
,( 'Grace' ,'化学' )
go
--Output
SELECT name,STRING_AGG(CONVERT (NVARCHAR (MAX),Course ),',') AS csv
FROM CourseSchedule
group by name
GO
