Сопоставление записей по нескольким комбинациям полей - PullRequest
2 голосов
/ 04 августа 2011

У меня есть таблица данных следующим образом

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

Я пытаюсь написать функцию / SP, которая будет принимать параметры FNAme, SName, Dob, PCode и Addr1. Я хочу иметь возможность сопоставлять записи, где ЛЮБЫЕ 3 из 5 параметров равны. Я не уверен, как это сделать БЕЗ написания длинной серии операторов И ИЛИ? Мне бы очень хотелось, чтобы решение было масштабируемым, поэтому, если в будущем будет добавлен еще один столбец, то должны совпадать 3 из 6 (или даже 4 из 6). Я тоже не против того, чтобы запрос был представлен Linq.

По сути, я ищу соответствующий алгоритм, который может соответствовать x из y частей данных.

1 Ответ

2 голосов
/ 04 августа 2011

Преобразование истинных сравнений в 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
...