1

別の顧客と同じ身元証明を使用している顧客を特定するレポートを生成する必要があります。

一連の他の操作の後、顧客の名前、顧客番号、および登録時に使用した ID 番号でグループ化された、ID 番号でグループ化されたテーブルがあり、残りのエントリは 1 つだけです。アウト。

問題は、多数の顧客が自分の名前で複数のアカウントを持っているように見え、追加の顧客も同じ 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  

これを行う良い方法はありますか?

4

1 に答える 1

1

おそらく使用EXISTS

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
)

これにより、一意の ID/名前を持つレコードも除外されることに注意してください。これらを含めたい場合は、別のものを使用する必要がありますNOT EXISTS:

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]
)

[customer number]( pk列名を表示していないため、それが識別子であると仮定します)

于 2013-03-13T22:49:36.670 に答える