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

Hapus Baris Duplikat di SQL Server

Contoh berikut menggunakan T-SQL untuk menghapus baris duplikat di SQL Server.

Untuk lebih spesifik, ini menghapus baris duplikat tetapi menyimpannya. Jadi, jika Anda memiliki dua baris yang identik, itu akan menghapus salah satunya dan menyimpan yang lain. Dengan kata lain, ini menghilangkan penipuan di meja.

Contoh Data

Misalkan kita memiliki tabel dengan data berikut:

SELECT * FROM Pets;

Hasil:

+---------+-----------+-----------+
| PetId   | PetName   | PetType   |
|---------+-----------+-----------|
| 1       | Wag       | Dog       |
| 1       | Wag       | Dog       |
| 2       | Scratch   | Cat       |
| 3       | Tweet     | Bird      |
| 4       | Bark      | Dog       |
| 4       | Bark      | Dog       |
| 4       | Bark      | Dog       |
+---------+-----------+-----------+

Kita dapat melihat bahwa dua baris pertama adalah duplikat, seperti halnya tiga baris terakhir.

Pilih Duplikat

Sebelum kita melakukan de-dupe tabel, kita dapat menggunakan query berikut untuk melihat baris mana yang akan dihapus:

WITH CTE AS 
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER ( 
                PARTITION BY PetId, PetName, PetType 
                ORDER BY PetId, PetName, PetType
                ) AS Row_Number
        FROM Pets
    )
SELECT * FROM CTE WHERE Row_Number <> 1;

Hasil:

+---------+-----------+-----------+--------------+
| PetId   | PetName   | PetType   | Row_Number   |
|---------+-----------+-----------+--------------|
| 1       | Wag       | Dog       | 2            |
| 4       | Bark      | Dog       | 2            |
| 4       | Bark      | Dog       | 3            |
+---------+-----------+-----------+--------------+

Hapus Duplikat

Untuk menghapus nilai duplikat, kita dapat mengubah kueri di atas dengan mengganti SELECT * pada baris terakhir dengan DELETE :

WITH CTE AS 
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER ( 
                PARTITION BY PetId, PetName, PetType 
                ORDER BY PetId, PetName, PetType
                ) AS Row_Number
        FROM Pets
    )
DELETE FROM CTE WHERE Row_Number <> 1;

Hasil:

(3 rows affected)

Tabel sekarang telah ditipu.

Kami dapat memverifikasi ini dengan memilih semua baris lagi:

SELECT * FROM Pets;

Hasil:

+---------+-----------+-----------+
| PetId   | PetName   | PetType   |
|---------+-----------+-----------|
| 1       | Wag       | Dog       |
| 2       | Scratch   | Cat       |
| 3       | Tweet     | Bird      |
| 4       | Bark      | Dog       |
+---------+-----------+-----------+

Seperti yang diharapkan, salah satu baris duplikat untuk anjing kami "Wag" telah dihapus dan yang lainnya tetap ada. Dua baris duplikat untuk "Bark" juga telah dihapus. Tabel telah berhasil ditipu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah Tabel Sementara RODBC saat menghubungkan ke MS SQL Server

  2. 3 Cara Mendapatkan Tipe Data Kolom di SQL Server (T-SQL)

  3. Memilih Prosesor untuk SQL Server 2014 – Bagian 2

  4. Kesalahan SQL dengan Order By di Subquery

  5. Bagaimana mengatasi tidak dapat mengganti kesalahan penyandian saat memasukkan XML ke SQL Server