Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Máy chủ SQL tương đương với GROUP_CONCAT ()

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 XMLPATH() .

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NOLOCK (gợi ý Máy chủ Sql) có phải là phương pháp không tốt không?

  2. Làm cách nào để chọn 5 hàng cuối cùng trong bảng mà không cần sắp xếp?

  3. Làm cách nào để thay đổi từ chế độ SQL Server Windows sang chế độ hỗn hợp (SQL Server 2008)?

  4. Hệ điều hành SQL Server lỗi 5:5 (Quyền truy cập bị từ chối.)

  5. SQL:Chọn tên cột động dựa trên biến