В SQL Server 2005 у меня есть таблица входных данных об успешных продажах, а также множество таблиц с информацией об известных клиентах и их деталях. Для каждой строки продаж мне нужно соответствовать 0 или 1 известным клиентам.
У нас есть следующая информация из таблицы продаж:
ServiceId,
Адрес,
Почтовый Индекс,
Адрес электронной почты,
Домашний телефон,
Имя,
LastName
Информация о клиентах включает в себя все это, а также дату «LastTransaction».
Любое из этих полей может быть привязано к 0 или более клиентам. Мы считаем совпадение в любое время, когда ServiceId, Address + ZipCode, EmailAddress или HomePhone в таблице продаж точно соответствуют клиенту.
Проблема в том, что у нас есть информация о многих клиентах, иногда о нескольких в одном домохозяйстве. Это означает, что у нас могут быть Джон Доу, Джейн Доу, Джим Доу и Боб Доу в одном доме. Все они будут соответствовать на Address + ZipCode и HomePhone - и, возможно, более одного также совпадут на ServiceId.
Мне нужен какой-то способ элегантно отслеживать в транзакции «лучшее» совпадение клиента. Если одно соответствует 6 полям, а остальные только 5, то этот клиент должен быть сохранен как соответствующий этой записи. В случае множественного совпадения 5 и ни одного совпадения больше следует сохранить самую последнюю дату LastTransaction.
Любые идеи будут весьма признательны.
Обновление: чтобы быть немного более понятным, я ищу хороший способ проверить количество точных совпадений в строке данных и выбрать, какие строки связать, основываясь на этой информации. Если фамилия «Доу», она должна точно соответствовать фамилии клиента, чтобы считаться соответствующим параметром, а не очень близким.