Я пытаюсь объединить записи клиентов с одинаковыми именами, фамилиями, SSN и DOB.Ниже приведена небольшая выборка из таблицы «Клиенты», в которой я определил клиентов, которые отвечают критериям объединения и должны быть объединены.Имена и SSN были изменены, но процесс останется прежним.Присоединив таблицу «Клиенты» к себе в FirstName, LastName, SSN и DOB и используя магию CROSS APPLY
, DENSE_RANK
и LAG
, я смог поместить каждую запись клиента в отдельную строку и определить, какие записи должныбыть объединенным с какой учетной записью - мы решили объединить записи в самый большой CID.
CID FirstName LastName SSN DOB MergeToCID Ranking
5728956 RON WILLIAMS 111111111 1988-05-17 5884361 1
5884361 RON WILLIAMS 111111111 1988-05-17 NULL 1
1722065 JOE SMITH 222222222 1981-01-15 2660126 2
2660126 JOE SMITH 222222222 1981-01-15 NULL 2
3910776 MARY JONES 333333333 1966-09-16 4019229 3
4019229 MARY JONES 333333333 1966-09-16 4106801 3
4106801 MARY JONES 333333333 1966-09-16 NULL 3
Таблица и столбцы клиента - FirstName
, LastName
и SSN
являются типами данных varchar.
CID (int), FirstName, LastName, SSN, isMerged (bit), mergedTo (int), isActive (bit)
Так что, если бы у меня был только Рон Уильямс, я мог бынапишите обновление, например:
update C
set C.mergedTo = mc.MergeToCID, C.isMerged = 1, C.isActive = 0
from Customers as C
inner join #MergeCustomers as mc on mc.CID = C.CID
where mc.MergeToCID IS NOT NULL;
# MergeCustomers будет просто временной таблицей приведенных выше примеров данных.
То, что я не смог определитькак это сделать, это обновить запись о клиенте, когда у нас есть более 2 дубликатов учетных записей - как пример Мэри Джонс.
Вместо слияния цепей мы переходим от идентификатора 3910776 к идентификатору 4019229, а затем к идентификатору 4019229 к идентификатору4106801 - для столбцов mergedTo 3910776 и 4019229 должно быть установлено значение 4106801, но я не смог этого сделать.Мысли?