Pouvez-vous m'aider avec les instructions SQL pour trouver des doublons sur plusieurs champs?
Par exemple, en pseudo code:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
et à partir de la déclaration ci-dessus s'il y a plusieurs occurrences, je voudrais sélectionner chaque enregistrement, sauf le premier .
sql
sql-server
tsql
sql-server-2008
JOE SKEET
la source
la source
Réponses:
Pour obtenir la liste des champs pour lesquels il existe plusieurs enregistrements, vous pouvez utiliser ..
Consultez ce lien pour plus d'informations sur la suppression des lignes.
http://support.microsoft.com/kb/139444
Edit: Comme les autres utilisateurs l'ont mentionné, il devrait y avoir un critère pour décider comment vous définissez les "premières lignes" avant d'utiliser l'approche du lien ci-dessus. Sur cette base, vous devrez utiliser une clause order by et une sous-requête si nécessaire. Si vous pouvez publier des exemples de données, cela aiderait vraiment.
la source
Vous mentionnez "le premier", donc je suppose que vous avez une sorte de commande sur vos données. Supposons que vos données soient classées par un champ
ID
.Ce SQL devrait vous procurer les entrées en double, à l'exception de la première. Il sélectionne essentiellement toutes les lignes pour lesquelles une autre ligne avec (a) les mêmes champs et (b) un ID inférieur existe. Les performances ne seront pas excellentes, mais cela pourrait résoudre votre problème.
la source
C'est une solution amusante avec SQL Server 2005 que j'aime. Je vais supposer que par "pour chaque enregistrement à l'exception du premier", vous voulez dire qu'il y a une autre colonne "id" que nous pouvons utiliser pour identifier quelle ligne est "première".
la source
Pour voir les valeurs en double:
la source
Si vous utilisez SQL Server 2005 ou version ultérieure (et les balises de votre question indiquent SQL Server 2008), vous pouvez utiliser des fonctions de classement pour renvoyer les enregistrements en double après le premier si l'utilisation de jointures est moins souhaitable ou peu pratique pour une raison quelconque. L'exemple suivant le montre en action, où il fonctionne également avec des valeurs nulles dans les colonnes examinées.
Notez après avoir exécuté cet exemple que le premier enregistrement de chaque "groupe" est exclu et que les enregistrements avec des valeurs nulles sont traités correctement.
Si vous n'avez pas de colonne disponible pour classer les enregistrements dans un groupe, vous pouvez utiliser les colonnes partitionnées comme colonnes de classement.
la source
la source
essayez cette requête pour avoir le nombre de séparations de chaque instruction SELECT:
la source