Supprimer les enregistrements en double dans SQL Server en fonction de champs spécifiques
Supposons qu'il existe une table nommée "Employee" qui contient une colonne nommée "EmployeeName". La tâche consiste à supprimer les enregistrements redondants en fonction du champ « EmployeeName » et à obtenir les données suivantes :
EmployeeName |
---|
Anand |
Anil |
Dipak |
Comment puis-je y parvenir avec une seule requête utilisant TSQL dans SQL Server ?
Solution utilisant les fonctions de fenêtre :
Pour résoudre ce problème, la fonction fenêtre est une méthode réalisable. Les fonctions de fenêtre vous permettent d'effectuer des opérations sur un ensemble de lignes au sein d'une partition définie par la clause OVER. Dans cet exemple, la partition est définie par la colonne "EmployeeName".
La requête suivante identifie et supprime efficacement les enregistrements en double en fonction du champ « EmployeeName » :
<code class="language-sql">delete x from ( select *, rn=row_number() over (partition by EmployeeName order by empId) from Employee ) x where rn > 1;</code>
Explication :
Afficher les enregistrements supprimés :
Pour prévisualiser les enregistrements qui seront supprimés sans exécuter réellement l'instruction de suppression, utilisez la requête de sélection suivante :
<code class="language-sql">select * from ( select *, rn=row_number() over (partition by EmployeeName order by empId) from Employee ) x where rn > 1;</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!