[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勝

 


小結

 


參考

STRING_AGG (Transact-SQL)

STRING_SPLIT (Transact-SQL)

[SQL Server][T-SQL]將多筆資料列串接成單一欄位的複合字串