SQL Server 2016推出了将字符串分割成数据集(STRING_SPLIT)的功能,今年SQL Server 2017则推出了将数据集组成字符串的串接功能(STRING_AGG),而且还支持简单的分组和排序,今晚继续吃第三颗语法糖(胖)。
建立测试环境
CREATE TABLE F1Driver (
id INT IDENTITY(1, 1) NOT NULL,
name NVARCHAR(50),
team NVARCHAR(50),
PRIMARY KEY (id)
);
INSERT INTO F1Driver (name,team) VALUES
(N'L. Hamilton',N'Mercedes AMG')
,(N'S. Vettel',N'Ferrari')
,(N'K. Räikkönen',N'Ferrari')
,(N'V. Bottas',N'Mercedes AMG')
SELECT * from F1Driver
查询测试数据表
好,车手和车队的简单测试环境有了!
回传1笔数据
L. Hamilton,S. Vettel,K. Räikkönen,V. Bottas
SELECT
STRING_AGG(name, ',')
FROM F1Driver
简单的使用STRING_AGG就能实现。
希望按照F1车队分组,然后返回2笔数据
S. Vettel,K. Räikkönen
V. Bottas,L. Hamilton
SELECT STRING_AGG (name,',')
FROM F1Driver
GROUP BY team
希望按照车队分组,但组合字符串时,要以车手的id降幂序组成。
K. Räikkönen,S. Vettel
V. Bottas,L. Hamilton
SELECT STRING_AGG (name,',')
WITHIN GROUP (ORDER BY id desc)
FROM F1Driver
GROUP BY team
加上WITHIN GROUP
两个车队的二号车手都可以排在前面了。
2017新加坡F1是Hamilton冠军了!生涯第60胜。
小结
- SQL 2016 STRING_SPLIT + SQL 2017 STRING_AGG
- 天下大势,分久必合,合久必分。
- SQL 2017之前可以参考这篇[SQL Server][T-SQL]将多笔数据列串接成单一字段的复合字符串来替代STRING_AGG功能。
参考
STRING_AGG (Transact-SQL)
STRING_SPLIT (Transact-SQL)
[SQL Server][T-SQL]将多笔数据列串接成单一字段的复合字符串。
原文:大专栏 [SQL Server][T-SQL]STRING_AGG数据集组成字符串(SQL Server 2017)