[SQL Server][T-SQL]STRING_AGG数据集组成字符串(SQL Server 2017)

时间:2019-09-05
本文章向大家介绍[SQL Server][T-SQL]STRING_AGG数据集组成字符串(SQL Server 2017),主要包括[SQL Server][T-SQL]STRING_AGG数据集组成字符串(SQL Server 2017)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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)


原文地址:https://www.cnblogs.com/petewell/p/11465521.html