0

さて、これは少し混沌としているので、私と一緒にいてみてください。

このような情報の表を手に入れました...

Table Name: Customers
_____________________________
ID   | CompanyName | FirstName | LastName  | Phone
-------------------------------
1    | Joes        | Joe       | James     | 1233334444
2    | Kennys      | Kenny     | Johnson   | 2222334555
3    | Kellys      | Kelly     | Gibson    | 5454445445
4    | Ricks #1    | Rick      | Lawson    | 4545334222
5    | Johns #1    | Johny B   | James     | 4545222211
6    | Johns #2    | Johny     | James     | 4545222211
7    | Johns #3    | Johny     | James     | 4545222211
8    | Ricks #2    | Rick A    | Lawson    | 4545334222

すべての重複レコードを検索し、それらを合計して、最初に見つかった会社名で見つかった重複の合計量を表示するSQLステートメントを作成する方法を知る必要があります。

*ここにあるキャッチ-上の表からわかるように、名前でイニシャルを付けることがあります(例-ID5とID6はまったく同じ人物ですが、ミドルネームのイニシャルをID5に入れています。ID4と同じように見えます。 ID7)

SQLステートメントを使用して、最初に姓を照合し、次に名と会社名の「種類」に基づいて「IS LIKE」を実行して、正しくカウントされていることを確認する必要があります。

たとえば、次のような結果が得られるはずです...

Table Name: TableResults
_____________________________
ID   | CompanyName | FirstName | LastName  | Phone       | Count
-------------------------------
4    | Ricks #1    | Rick      | Lawson    | 4545334222  | 2
5    | Johns #1    | Johny B   | James     | 4545222211  | 3

これも可能ですか?

4

2 に答える 2

2

あいまいマッチングを使用する必要があるかもしれません。

これを試して:

WITH InitialData AS
(
  SELECT *, SOUNDEX(LastName) + SOUNDEX(CompanyName) Similarity 
    FROM Customers
), FinalData AS
(
  SELECT *, 
          ROW_NUMBER() OVER(PARTITION BY Similarity ORDER BY ID) Position,
          COUNT(1)  OVER(PARTITION BY Similarity) Count
  FROM InitialData
)
SELECT ID, CompanyName, FirstName, LastName, Phone, Count
  FROM FinalData
WHERE Position = 1
  AND Count > 1

SQLFiddle:http ://sqlfiddle.com/#!3/7c1fb/2

于 2012-07-10T23:35:27.710 に答える
0

名前の分析は、可能であれば、非常に複雑なSQLになると思います。まず、名前の列で大文字と小文字を区別しない照合( 。)を使用していることを確認することをお勧めしますutf8_general_ci。私は人々が一貫して彼らの名前を大文字にすることを信用しません。彼らが不注意であるならば、彼らはまたタイプミスを持っているかもしれません。

LIKEをどこに置くかを正確に知らない限り、わずかな違いがある文字列に一致するほど賢くはありません%。これは単なるワイルドカードマッチング関数です。

たぶん、 SOUNDEXアルゴリズムを使用してチェックアウトしますか?ただし、これはすべてのデータが英語である場合にのみ機能します。

電話番号は重複を識別するための信頼できる方法ですか?その場合は、名前の分析をスキップして、次のようにすることができます。

SELECT ID, CompanyName, FirstName, LastName, Phone, COUNT(1) AS Count
FROM Customers 
GROUP BY Phone
ORDER BY ID ASC
于 2012-07-10T23:27:43.887 に答える