Considérez une colonne nommée EmployeeName
table Employee
. Le but est de supprimer les enregistrements répétés, en fonction du EmployeeName
champ.
EmployeeName
------------
Anand
Anand
Anil
Dipak
Anil
Dipak
Dipak
Anil
En utilisant une requête, je veux supprimer les enregistrements qui sont répétés.
Comment cela peut-il être fait avec TSQL dans SQL Server?
sql
tsql
duplicates
delete-row
usr021986
la source
la source
empId
colonne de votre exemple utilisée par John?row_number() over (partition by EmployeeName order by EmployeeName)
... cela choisirait un enregistrement unique arbitraire pour chaque nom .Réponses:
Vous pouvez le faire avec les fonctions de fenêtre. Il ordonnera les dupes par empId et supprimera tout sauf le premier.
Exécutez-le en tant que sélection pour voir ce qui serait supprimé:
la source
ORDER BY (SELECT NULL)
stackoverflow.com/a/4812038En supposant que votre table Employee a également une colonne unique (
ID
dans l'exemple ci-dessous), ce qui suit fonctionnera:Cela laissera la version avec l'ID le plus bas du tableau.
Modifier
le commentaire de Re McGyver - à partir de SQL 2012
Pour 2008 R2 et versions antérieures,
Pour 2008R2, vous devrez convertir le
GUID
en un type pris en charge parMIN
, par exempleSqlFiddle pour différents types dans Sql 2008
SqlFiddle pour différents types dans SQL 2012
la source
Vous pouvez essayer quelque chose comme ce qui suit:
(cela suppose que vous ayez un champ unique basé sur un entier)
Personnellement, je dirais que vous feriez mieux d'essayer de corriger le fait que des entrées en double sont ajoutées à la base de données avant qu'elle ne se produise plutôt que comme une opération de correction postérieure.
la source
la source
La magie des expressions de table courantes.
la source
Essayer
la source
Si vous cherchez un moyen de supprimer les doublons, mais que vous avez une clé étrangère pointant vers la table avec des doublons, vous pouvez adopter l'approche suivante en utilisant un curseur lent mais efficace.
Il déplacera les clés en double sur la table de clé étrangère.
la source
la source
Veuillez également consulter la méthode de suppression ci-dessous.
Créé un exemple de table nommé
@Employee
et chargé avec des données données.Résultat:
Je sais, cela a été demandé il y a six ans, poster juste au cas où cela serait utile pour n'importe qui.
la source
Voici un bon moyen de dédupliquer les enregistrements dans une table qui a une colonne d'identité basée sur une clé primaire souhaitée que vous pouvez définir au moment de l'exécution. Avant de commencer, je vais remplir un exemple d'ensemble de données avec lequel travailler à l'aide du code suivant:
Ensuite, je vais créer un type appelé ColumnNames:
Enfin, je vais créer un proc stocké avec les 3 mises en garde suivantes: 1. Le proc prendra un paramètre obligatoire @tablename qui définit le nom de la table que vous supprimez de votre base de données. 2. Le proc a un paramètre facultatif @columns que vous pouvez utiliser pour définir les champs qui constituent la clé primaire souhaitée que vous supprimez. Si ce champ est laissé vide, on suppose que tous les champs en dehors de la colonne d'identité constituent la clé primaire souhaitée. 3. Lorsque les enregistrements en double sont supprimés, l'enregistrement avec la valeur la plus basse dans sa colonne d'identité sera conservé.
Voici mon proc stocké delete_dupes:
Une fois que cela est respecté, vous pouvez supprimer tous vos enregistrements en double en exécutant le processus. Pour supprimer des dupes sans définir une clé primaire souhaitée, utilisez cet appel:
Pour supprimer les dupes en fonction d'une clé primaire souhaitée définie, utilisez cet appel:
la source