2017-09-06 3 views
1

J'ai une table comme ci-dessous:Trouver les enregistrements en double avec différents ID dans une table

ID  Product# Service# ServiceDate 
1  100  122  2017-01-02 
2  100  124  2017-03-02 
3  122  133  2017-04-02   
100 100  122  2017-05-02 

Je dois trouver les dossiers qui ont le même produit et le service # # mais différents ID. Pour cela, je l'ai écrit le code ci-dessous:

Select * 
FROM MyTable as M1 Inner join 
MyTable as M2 on 
M1.Product#=M2.Product# and M1.Service#=M2.Service# and M1.ID!=M2.ID 

Cependant, j'obtenir des résultats en double en tant que tels:

ID Product# Service# ServiceDate ID Product# Service# ServiceDate 
1 100  122  2017-01-02 100 100  122  2017-05-02 
100 100  122  2017-05-02 1 100  122  2017-01-02 

Toute idée comment éliminer ces lignes en double? Je dois voir un résultat en tant que tel:

ID Product# Service# ServiceDate ID Product# Service# ServiceDate 
    1 100  122  2017-01-02 100 100  122  2017-05-02 
+0

Avez-vous déjà plus de deux entrées avec les mêmes numéros de produit et de service ici? – Eli

+1

@Eli Oui. Cela dépend du nombre de doublons présents dans la table. Mais ça peut être plus de deux. – abahr

+0

Vérifiez ma réponse ci-dessous - il peut fonctionner (je l'ai testé) avec plus de deux doublons. – Eli

Répondre

1

Essayez les options suivantes :

Select * 
FROM MyTable as M1 
Inner join MyTable as M2 on M1.Product#=M2.Product# and M1.Service#=M2.Service# and M1.ID!=M2.ID 
where m1.id < m2.id 

Explication: Votre exemple montre les deux faces de chaque pièce; en limitant le fait que l'un des identifiants soit inférieur à l'autre, vous aurez automatiquement la moitié des enregistrements, ce qui vous permettra d'obtenir toutes les combinaisons uniques.

Bonus: Pour le plaisir, j'ai essayé d'ajouter une ligne dupliquée à votre ensemble de données, et cela a fonctionné comme prévu.

+0

Merci, Eli! Votre réponse était juste sur le point. – abahr

+0

@abahr vous êtes les bienvenus. S'il vous plaît envisager d'upvoting et d'accepter comme la réponse. – Eli

+0

J'ai fait les deux mais mon vote ne sera pas visible pour le public puisque je suis nouveau ici et ma réputation est inférieure à 15. – abahr

0

Si vous êtes désireux de revenir à seulement deux lignes sans les colonnes en double, remplacer

Select * 

avec

Select M1.* 
+0

Je dois éliminer les lignes en double et non les colonnes. J'ai ajouté un exemple du résultat que je recherche dans la question. – abahr