2013-03-13 2 views
1

다른 고객과 동일한 신분증을 사용하는 고객을 식별하는 보고서를 생성해야합니다.중복 된 정보가있는 항목을 제거하는 SQL Server

일련의 다른 작업이 끝나면 고객 이름, 고객 번호 및 ID 번호별로 그룹화 한 등록시 사용 된 ID 증명 번호가있는 테이블이 있습니다. 한 항목 만 남았습니다.

추가 고객이 동일한 ID 번호를 사용하지 않는 한 많은 수의 고객이 이름이 여러 개인 계정이 있고 무시해야한다는 점에서 문제가 발생합니다.이 경우 해당 번호의 모든 항목은 지켜야한다.

예를 들어, 분명히 같은 사람이므로 1 ~ 3 항목을 제거하고 6은 일치하지 않으므로 4와 5를 모두 보유합니다.

 ID # | Name | customer number 
    1 | 1111 | April | 321 
    2 | 1111 | April | 432 
    3 | 1111 | April | 431 
    4 | 2222 | Bob  | 987 
    5 | 2222 | Bob  | 454 
    6 | 2222 | Charles | 159 

이렇게하는 좋은 방법이 있습니까? 아마도 EXISTS를 사용

답변

1

:이 또한 고유 ID/이름으로 기록을 생략 할 것이다

SELECT ID,Name,[customer number] 
FROM dbo.Customer c1 
WHERE EXISTS 
(
    SELECT 1 FROM dbo.Customer c2 
    WHERE c2.ID = c1.ID 
    AND c2.Name <> c1.Name 
) 

참고.

SELECT ID,Name,[customer number] 
FROM dbo.Customer c1 
WHERE EXISTS 
(
    SELECT 1 FROM dbo.Customer c2 
    WHERE c2.ID = c1.ID 
    AND c2.Name <> c1.Name 
) 
OR NOT EXISTS 
(
    SELECT 1 FROM dbo.Customer c2 
    WHERE c2.ID = c1.ID 
    AND c2.[customer number] <> c1.[customer number] 
) 

,

+0

이 완벽하게 작동하는 것 같다 ([customer number] 당신이 PK의 열 이름을 표시하지 않은 이후 식별자가 있다고 가정) 감사 :이를 포함 할 경우 다른 NOT EXISTS을 사용해야합니다 – user2167389

관련 문제