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

Làm cách nào để xóa các hàng trùng lặp trong SQL Server?

Tôi thích CTE và ROW_NUMBER vì cả hai kết hợp cho phép chúng tôi xem hàng nào bị xóa (hoặc cập nhật), do đó chỉ cần thay đổi DELETE FROM CTE... thành SELECT * FROM CTE :

WITH CTE AS(
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1

DEMO (kết quả là khác nhau; tôi cho rằng đó là do lỗi đánh máy từ phía bạn)

COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2

Ví dụ này xác định các bản sao bằng một cột duy nhất col1PARTITION BY col1 . Nếu bạn muốn bao gồm nhiều cột, chỉ cần thêm chúng vào PARTITION BY :

ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spotlight Cloud hỗ trợ cho Azure SQL DB Thông báo (Xem trước)

  2. Thế tiến thoái lưỡng nan về đặt tên bảng:Tên số ít so với số nhiều

  3. Khóa ngoại của SQL Server qua ranh giới cơ sở dữ liệu - kỹ thuật thực thi

  4. System.AccessViolationException trong .NET 4.0 khi kết nối với Cơ sở dữ liệu SQL

  5. Sử dụng câu lệnh IF ELSE dựa trên Count để thực hiện các câu lệnh Chèn khác nhau