2017-09-06 2 views
1

내에서 서로 다른 ID를 가진 레코드를 중복 :찾기 내가 아래 테이블이 테이블

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 

나는 동일한 제품 번호 및 서비스 #하지만 서로 다른 ID를 가지고있는 기록을 찾을 필요가있다. 이러한 중복 행을 제거하는 방법

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 

어떤 생각 :

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 

는 그러나, 나는이 같은 중복 된 결과를 얻을 :이, 나는 아래의 코드를 작성?

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

같은 제품 및 서비스로 2 개 이상의 항목을 등록 해 보냅니 까? – Eli

+1

@Eli 예. 그것은 얼마나 많은 중복 테이블에 존재에 따라 다릅니다. 그러나 그것은 둘 이상이 될 수 있습니다. – abahr

+0

아래에서 내 대답을 확인하십시오 - 두 개 이상의 중복과 함께 작동 (나는 그것을 테스트) 할 수 있습니다. – Eli

답변

1

교체 : I는 다음과 같은 결과를 볼 필요가 :

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 

설명 :이 예에서는 각 동전의 양면을 보여줍니다. ID 중 하나가 다른 ID보다 작은 것으로 제한함으로써 레코드의 절반 만 자동으로 가져와 모든 고유 한 조합을 효과적으로 얻을 수 있습니다.

보너스 : 재미 있기 때문에 샘플 데이터 세트에 중복 행을 하나 더 추가하려고했는데 예상대로 작동했습니다.

+0

감사합니다, Eli! 당신은 답이 바로 그 시점이었습니다. – abahr

+0

@abahr 대단히 반갑습니다. 상향 투표를 고려하고 대답을 수락하십시오. – Eli

+0

나는 둘 다했으나 나의 새로운 투표는 공공연한 것으로 보이지 않을 것이다. 나는 이곳에 새로운 사람이되어 명성이 15 세 이하이기 때문이다. – abahr

0

당신이 중복 된 열없이 두 행을 반환하고자하는 경우, 다음을 시도

Select * 

Select M1.* 
+0

열이 아닌 중복 행을 제거해야합니다. 질문에서 찾고있는 결과의 예를 추가했습니다. – abahr

관련 문제