У меня 2 стола...
- Клиент
- Идентификация клиента
Таблица клиентов имеет 2 поля
- Идентификатор клиента varchar (20)
- Customer_Id_Link varchar(50)
Таблица CustomerIdentification имеет 3 поля
- Идентификатор клиента varchar (20)
- Идентификационный_номер varchar(50)
- Personal_ID_Type_Code int -- это внешний ключ к другой таблице, но это не имеет значения
По сути, Customer — это основная таблица клиентов (с CustomerID в качестве первичного ключа), а CustomerIdentification может иметь несколько элементов идентификации для данного клиента. Другими словами, CustomerId в CustomerIdentification является внешним ключом к таблице Customer. У клиента может быть много частей идентификации, каждая из которых имеет Identification_Number
и Personal_ID_Type_Code
(это целое число, которое говорит вам, является ли идентификация паспортом, грехом, водительскими правами и т. д.).
Теперь в таблице клиентов есть следующие данные: Customer_Id_Link
на данный момент пусто (пустая строка)
CustomerId Customer_Id_Link
--------------------------------
'CU-1' <Blank>
'CU-2' <Blank>
'CU-3' <Blank>
'CU-4' <Blank>
'CU-5' <Blank>
и таблица CustomerIdentification имеет следующие данные:
CustomerId Identification_Number Personal_ID_Type_Code
------------------------------------------------------------
'CU-1' 'A' 1
'CU-1' 'A' 2
'CU-1' 'A' 3
'CU-2' 'A' 1
'CU-2' 'B' 3
'CU-2' 'C' 4
'CU-3' 'A' 1
'CU-3' 'B' 2
'CU-3' 'C' 4
'CU-4' 'A' 1
'CU-4' 'B' 2
'CU-4' 'B' 3
'CU-5' 'B' 3
По сути, несколько клиентов могут иметь одни и те же Identification_Number
и Personal_ID_Type_Code
в CustomerIdentification
. Когда это происходит, все поля Customer_Id_Link должны быть обновлены общим значением (это может быть GUID или что-то еще). Но обработка для этого более сложная.
Правила таковы:
Для сопоставления полей Personal_ID_Type_Code
и Identification_Number
между записями о клиентах — сравните поля Identification_Number
для всех других общих полей Personal_ID_Type_Code
для всех записей о клиентах из приведенного выше совпадения — если да, то свяжите записи о клиентах.
Например:
ID совпадения 1 A для CU-1, CU-2, CU-3, CU-4
- Несоответствие идентификатора исключения 2 (A в CU-1 и B в CU-3)
- Связывание не выполнено
Идентификатор матча 2 B для CU-3, CU-4
- Нет несоответствия идентификатора
- Свяжите CU-3 и CU-4 (обновите поле
Customer_Id_Link
с общим значением в таблице клиентов для обоих)
ID совпадения 3 A для CU-1, CU-4
- Несоответствие идентификатора исключения 2 (A и B)
- Связывание не выполнено
Идентификатор матча 3 B для CU-2, CU-5
- Нет несоответствия идентификатора
- Свяжите CU-2 и CU-5 (обновите поле
Customer_Id_Link
общим значением в таблице клиентов для обоих) Идентификатор совпадения 4 C для CU-2, CU-3 - CU-2 уже связан, сохраните CU-5 в списке связывания клиентов
- CU-3 уже связан, сохраните CU-4 в списке связывания клиентов
- Несоответствие идентификатора исключения 3 (B на CU-2 и A на CU-4)
- Связывание не выполнено (предыдущее связывание остается)
Любая помощь будет оценена. Это не дает мне спать уже два дня, и я не могу найти решение. В идеале решением будет хранимая процедура, которую я могу выполнить для установления связи с клиентом.
- SQL Server 2008 R2 Стандартная 64-разрядная версия
ОБНОВЛЕНИЕ-----------------
Я знал, что будет сложно объяснить эту проблему, поэтому я беру на себя вину. Но, по сути, я хочу иметь возможность связать всех клиентов с одинаковыми идентификационными номерами, только у клиента может быть более 1 идентификационного номера. Возьмем пример 1. 1 A (1 – Personal_id_type_code, а A – идентификационный номер, существующий для 4 разных клиентов. CU-1, CU-2, CU-3, CU-4. Таким образом, потенциально это может быть один и тот же клиент, который существует 4 раза в таблица клиентов с разными идентификаторами клиентов.Нам нужно связать их с 1 общим значением.Однако у CU-1 есть 2 других идентификатора и если хотя бы 1 из них отличается от других 3 (CU-2, CU-3, CU-4 ) они не являются одним и тем же клиентом. Таким образом, идентификатор 2 с номером A не совпадает с идентификатором 2 для CU-3 (его B) и таким же для CU-4. Кроме того, даже несмотря на то, что идентификатор 2 номер A не существует в CU-2 , идентификатор 3 CU-1 и номер A не совпадают с идентификатором 3 CU-2 (его B), поэтому это вообще не совпадение.
Следующими общими идентификаторами и номерами являются 2-b, которые существуют в CU-3 и CU-4. Эти два клиента на самом деле являются одним и тем же, потому что оба имеют идентификатор 1 - A и идентификатор 2 - B. ID 4 - C и идентификатор 3 - A не имеют значения, потому что оба идентификатора разные. По сути, это означает, что у этого клиента есть 4 идентификатора I A, 2 B, 4 C и 3 A. Итак, теперь нам нужно связать этого клиента с общим уникальным значением (guid) в таблице клиентов.
Надеюсь, теперь я объяснил этот очень сложный вопрос. Это трудно объяснить, поскольку это очень уникальная проблема.