我有一个数据表如下
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
我正在尝试编写一个将接受参数 FNAme、SName、Dob、PCode 和 Addr1 的函数/SP。我希望能够匹配 5 个参数中任意 3 个参数相等的记录。我不确定如何在不编写一长串 AND OR 语句的情况下执行此操作?我非常希望该解决方案也具有可扩展性,因此如果将来添加另一列,则 6 列中的 3 列必须匹配(甚至 6 列中的 4 列)。我也不介意由 Linq 表示的查询。
本质上,我正在寻找一种可以匹配 y 条数据中的 x 条的匹配算法。
最佳答案
将真正的比较转换为 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
关于sql - 匹配多个字段组合的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933004/