我有一个数据表如下
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。
答案 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