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功能。