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

group_concat trong SQL Server 2008

Trong SQL Server từ phiên bản 2005 trở lên, bạn có thể sử dụng CTE (Biểu thức bảng chung) với ROW_NUMBER chức năng loại bỏ các bản sao:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
SELECT 
   ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1

CTE này "phân vùng" dữ liệu của bạn theo UserID và đối với mỗi phân vùng, ROW_NUMBER hàm đưa ra các số tuần tự, bắt đầu từ 1 và được sắp xếp theo Created DESC - vì vậy hàng mới nhất nhận được RowNum =1 (cho mỗi UserID ) là những gì tôi chọn từ CTE trong câu lệnh SELECT sau nó.

Sử dụng cùng một CTE, bạn cũng có thể dễ dàng xóa các bản sao:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
DELETE FROM dbo.YourTable t
FROM LastPerUser cte
WHERE t.ID = cte.ID AND cte.RowNum > 1

Nguyên tắc tương tự cũng được áp dụng:bạn "nhóm" (hoặc phân vùng) dữ liệu của mình theo một số tiêu chí, bạn đánh số liên tục tất cả các hàng cho mỗi phân vùng dữ liệu và những hàng có giá trị lớn hơn 1 cho "số hàng được phân vùng" sẽ bị loại bỏ bởi mã <> XÓA .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cách nào để duy trì một biến trong quá trình di chuyển không?

  2. Chúng ta có thể cài đặt phiên bản Express và phiên bản Chuẩn của SQL Server trên cùng một Người dùng PC không?

  3. Thiết lập kết nối từ Tác vụ tập lệnh (VB) đến Trình quản lý kết nối OLEDB của Gói SSIS

  4. Các truy vấn được thực thi lần cuối cho một cơ sở dữ liệu cụ thể

  5. Cách tạo khóa ngoại trong SQL Server (Ví dụ T-SQL)