L'exemple suivant utilise T-SQL pour supprimer les lignes en double dans SQL Server.
Pour être plus précis, il supprime les lignes en double mais en conserve une. Donc si vous avez deux lignes identiques, il en supprime une et conserve l'autre. En d'autres termes, il dédouble la table.
Exemple de données
Supposons que nous ayons un tableau avec les données suivantes :
SELECT * FROM Pets;
Résultat :
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | | 4 | Bark | Dog | | 4 | Bark | Dog | +---------+-----------+-----------+
Nous pouvons voir que les deux premières lignes sont des doublons, tout comme les trois dernières lignes.
Sélectionner les doublons
Avant de dédupliquer la table, nous pouvons utiliser la requête suivante pour voir quelle(s) ligne(s) seront supprimées :
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;
Résultat :
+---------+-----------+-----------+--------------+ | PetId | PetName | PetType | Row_Number | |---------+-----------+-----------+--------------| | 1 | Wag | Dog | 2 | | 4 | Bark | Dog | 2 | | 4 | Bark | Dog | 3 | +---------+-----------+-----------+--------------+
Supprimer les doublons
Pour supprimer les valeurs en double, nous pouvons modifier la requête ci-dessus en remplaçant SELECT *
sur la dernière ligne avec 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;
Résultat :
(3 rows affected)
La table a maintenant été dédupliquée.
Nous pouvons le vérifier en sélectionnant à nouveau toutes les lignes :
SELECT * FROM Pets;
Résultat :
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | +---------+-----------+-----------+
Comme prévu, l'une des lignes en double pour notre chien "Wag" a été supprimée et l'autre reste. Deux des lignes en double pour "Bark" ont également été supprimées. La table a été dédupliquée avec succès.