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

SQL Server 2008:hapus baris duplikat

Anda dapat DELETE dari cte:

WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1

ROW_NUMBER() fungsi memberikan nomor untuk setiap baris. PARTITION BY digunakan untuk memulai penomoran ulang untuk setiap item dalam grup itu, dalam hal ini setiap nilai uniqueid akan mulai penomoran 1 dan naik dari sana. ORDER BY menentukan urutan nomor yang masuk. Karena setiap uniqueid mendapat nomor mulai dari 1, catatan apa pun dengan ROW_NUMBER() lebih besar dari 1 memiliki duplikat uniqueid

Untuk mendapatkan pemahaman tentang bagaimana ROW_NUMBER() fungsi berfungsi, coba saja:

SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid

Anda dapat menyesuaikan logika ROW_NUMBER() berfungsi untuk menyesuaikan rekaman mana yang akan Anda simpan atau hapus.

Misalnya, mungkin Anda ingin melakukan ini dalam beberapa langkah, pertama-tama menghapus catatan dengan nama belakang yang sama tetapi nama depan yang berbeda, Anda dapat menambahkan nama belakang ke PARTITION BY :

WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cegah penyisipan rentang tanggal yang tumpang tindih menggunakan pemicu SQL

  2. Memahami Pernyataan DROP TABLE di SQL Server

  3. SQL Server memformat tempat desimal dengan koma

  4. Hapus satu karakter dari bidang varchar SQL Server 2008

  5. Membuat Tabel dengan Kompresi di SQL Server (T-SQL)