匹配多个字段组合的记录

时间:2011-08-03 20:39:40

标签: sql linq algorithm math matching

我有一个数据表如下

FName  SName  DOB  PCode   Addr1     
====   ==== ====== =====   =======  
Bob    Test 231280 S66TH   1 Test Lane  
Bobby  Test 240977 S66TH   2 Test Drive
Robert Test 240977 xxxxx   xxxxxx
Tim    Test 140977 S78YH   5 Hill Road

我正在尝试编写一个接受Paramters FNAme,SName,Dob,PCode和Addr1的函数/ SP。我希望能够匹配5个参数中的任何3个相等的记录。在不写一长串AND OR语句的情况下,我不知道怎么做?我非常希望解决方案也可以扩展,所以如果将来添加另一列,那么6个中的3个必须匹配(甚至6个中的4个)。我不介意Linq代表的查询。

基本上我正在寻找匹配的算法,可以匹配y个数据中的x。

1 个答案:

答案 0 :(得分:2)

将真实比较转换为1,将错误比较转换为0,将它们全部加在一起,并测试总和是否至少为3.

where (case FName when @FName then 1 else 0 end)
    + (case SName when @Sname then 1 else 0 end)
    + (case DOB   when @DOB   then 1 else 0 end)
    + (case PCode when @PCode then 1 else 0 end)
    + (case Addr1 when @Addr1 then 1 else 0 end)
    >= 3