Trước khi SQL Server 2017 ra đời, không có T-SQL tương đương với MySQL GROUP_CONCAT()
hàm số. Hàm này cho phép bạn trả về tập hợp kết quả dưới dạng danh sách được phân tách bằng dấu phẩy, thay vì liệt kê mỗi hàng dưới dạng một hàng riêng biệt (như với tập kết quả bình thường).
Trước SQL Server 2017, nếu bạn muốn đặt kết quả của mình vào một danh sách được phân tách bằng dấu phẩy, bạn cần tìm một giải pháp thay thế, có thể là sử dụng kết hợp STUFF()
, FOR XML
và PATH()
.
Tuy nhiên, T-SQL hiện có STRING_AGG()
hàm có sẵn từ SQL Server 2017. Hàm này thực hiện khá nhiều điều tương tự như GROUP_CONCAT()
của MySQL chức năng (với một số khác biệt nhỏ).
Cú pháp
Cú pháp của STRING_AGG()
hàm như sau:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Ở đâu expression
là một biểu thức của bất kỳ loại nào. Các biểu thức được chuyển đổi thành NVARCHAR
hoặc VARCHAR
các loại trong quá trình nối. Các loại không phải chuỗi được chuyển đổi thành NVARCHAR
loại.
Trong đó dấu phân tách là ký tự của NVARCHAR
hoặc VARCHAR
loại được sử dụng làm dấu phân cách cho các chuỗi được nối. Nó có thể là chữ hoặc biến.
Mệnh đề đơn hàng (tùy chọn) bao gồm WITHIN GROUP
theo sau là ORDER BY ASC
hoặc ORDER BY DESC
trong dấu ngoặc đơn. ASC
sắp xếp kết quả theo thứ tự tăng dần. Đây là giá trị mặc định. DESC
sắp xếp kết quả theo thứ tự giảm dần.
Ví dụ
Dưới đây là một ví dụ nhanh về STRING_AGG()
chức năng:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Kết quả:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Như bạn có thể thấy, tập hợp kết quả được liệt kê dưới dạng danh sách được phân tách bằng dấu phẩy. Điều này là do đối số thứ hai của chúng tôi là dấu phẩy, chỉ định rằng dấu phẩy nên được sử dụng làm dấu phân cách.
Đây là bộ kết quả tương tự nhưng không có STRING_AGG()
chức năng:
SELECT Genre AS Result FROM Genres;
Kết quả:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Vì vậy, chỉ là một tập hợp kết quả bình thường.
Để biết thêm ví dụ, chẳng hạn như nhóm, xử lý giá trị null và sắp xếp kết quả, hãy xem Cách trả kết quả truy vấn dưới dạng danh sách được phân tách bằng dấu phẩy trong SQL Server.