2017-08-22 2 views
0

名前が変更されたが顧客IDが変更されていないことを検出するクエリを作成しようとしています。これを行うには、私は1より大きい任意の結果が重要である、顧客IDを数えその後 group by節を小さなバリエーションのグループにすることは可能ですか?

Group by CustID, Name 

を使用しました。これまで私が持っていたクエリは次のとおりです。

Select 
    CustID, 
    NumDiffNames 
from 
    (select 
     CustID, 
     count(CustID) NumDiffNames 
    from 
     (Select 
      CustID, 
      Name 
     from 
      (select 
       CustID, 
       concat(rtrim(ltrim(FIRSTNAME)),rtrim(ltrim(LASTNAME))) Name 
      FROM 
       [Branch] 
      union 
      select 
       coCustID as CustID, 
       concat(rtrim(ltrim(COFNAME)),rtrim(ltrim(COLNAME))) Name 
      FROM 
       [Branch]) a 
     group by CustID, Name) b 
    group by CustID) c 
where NumDiffNames>1 

しかし、私は多くの誤認を得ています。私は、それぞれの名前の周りの空白をトリミングすることによってそれらの多数を削除しました。別の偽陽性のセットは、データ入力およびスペルミスによって形成される。たとえば、あるケースでは、顧客名はVanessaと表記され、同じCustomer IDの場合は名前がVenessaとなります。ある場合には名前の綴りは正しく記されていますが、例えば2つの文字が別のJohn & Jhonに転記されています。

1つまたは2つの文字の違いなど、分散が大きいグループを持つことは可能ですか?

+0

試した 'query'も投稿できますか? –

+1

名前については、 'soundex()'を試すことができます。しかし、リレーショナルデータベースは、ファジーストリングマッチングに最適なツールではありません。 –

+0

支援するソフトウェアがあります。それはジョー対ジョセフとキャサリン、ケイト、キャシーを扱う... –

答えて

0

このようなものを使用できますか?

WITH CTE AS (
    SELECT DISTINCT 
     CustID 
     ,[name] 
     ,ROW_NUMBER() OVER (PARTITION BY CustID, [Name] ORDER BY CustID) AS RowNumber 
    FROM Branch) 

SELECT * 
FROM CTE 
WHERE RowNumber > 1 
関連する問題