2015-11-05 14 views
0

我有一张目前只将记录缩小到唯一联系人的表,并且它可以正常工作,但由于拼写错误,我仍然留下该唯一联系人的类似记录。一些“重复项”具有空列或空列。查找具有最完整列的记录

我想通过查找填充最多的列的记录来解决这个问题(尽管准确性),排除其余的?如果多列填充的金额相同,请根据最近的创建日期进行选择。有没有办法做到这一点?

fileid datecreated first middle last phone  
00001  2015-11-16  bob  null  smith 555-5555 
00002  2013-18-7  BOB    SMITHE   
00003  2015-11-1  Bobb  B   Smith 555-5555 
00004  2014-5-23  bob  smith    NULL 

我想我会开始使用COUNT(),但我不知道如果这是正确的。

+0

这是一个巨大的项目。 – Strawberry

+0

由于草莓提到这可能是巨大的。在asp.net中查找levenshtein距离和lucene。让我知道你是否需要更多细节。请参考这个http://levenshtein.blogspot.com/ – Moe

+0

根据你有多少这些重复的行,我会试图手动做到这一点。然后,我会支持应用程序和数据库逻辑,以确保它不会再发生。 – Arth

回答

0

这可能会帮助您开始使用。根据它是NULL还是空来为每列分配一个1或0。获得该行的总和。订单或这笔款项,然后按日期。

select top 1 * 
from 
    (select 
     * 
     , CASE WHEN fileid IS NULL or fileid = '' THEN 0 ELSE 1 END + 
     CASE WHEN datecreated IS NULL or datecreated = '' THEN 0 ELSE 1 END + 
     CASE WHEN first IS NULL or first = '' THEN 0 ELSE 1 END + 
     CASE WHEN middle IS NULL or middle = '' THEN 0 ELSE 1 END + 
     CASE WHEN last IS NULL or last = '' THEN 0 ELSE 1 END + 
     CASE WHEN phone IS NULL or phone = '' THEN 0 ELSE 1 END AS NumFilled 
    from 
     YourTable) yt 
order by numfilled, datecreated desc