Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menghapus baris duplikat di SQL Server?

Saya suka CTE dan ROW_NUMBER karena keduanya digabungkan memungkinkan kita untuk melihat baris mana yang dihapus (atau diperbarui), oleh karena itu ubah saja DELETE FROM CTE... ke 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 (hasilnya berbeda; saya berasumsi bahwa itu karena kesalahan ketik di pihak Anda)

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

Contoh ini menentukan duplikat dengan satu kolom col1 karena PARTITION BY col1 . Jika Anda ingin menyertakan beberapa kolom, cukup tambahkan ke 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. Menghitung Pelanggan baru per Bulan

  2. Klausa WHERE vs ON saat menggunakan GABUNG

  3. Menangani nilai yang tidak ada dalam ekspresi kueri sql untuk bagan ssrs

  4. Bagaimana saya bisa melihat semua karakter khusus yang diizinkan di bidang varchar atau char di SQL Server?

  5. OPENXML dengan xmlns:dt