Я импортирую данные о клиентах из системы другого поставщика, и у нас есть процессы слияния, которые мы используем для выявления потенциальных дубликатов учетных записей клиентов, и они объединяют их, если они удовлетворяют определенным критериям - таким как то же имя, фамилия, SSN и DOB.В этом процессе я вижу, где мы создаем цепочки - например, клиент A объединяется с клиентом B, который затем объединяется с клиентом C.
Что я надеюсь сделать, чтобы идентифицировать эти цепочки и обновитьзапись клиента, указывающая на последнюю запись в цепочке.Таким образом, в моем примере выше, клиент A и клиент B будут иметь идентификатор клиента C в своем поле слияния с.
CustID FName LName CustStatusType isMerged MergedTo
1 Kevin Smith M 1 2
2 Kevin Smith M 1 3
3 Kevin Smith M 1 4
4 Kevin Smith O 0 NULL
5 Mary Jones O 0 NULL
6 Wyatt Earp M 1 7
7 Wyatt Earp O 1 NULL
8 Bruce Wayn M 1 10
9 Brice Wayne M 1 10
10 Bruce Wane M 1 11
11 Bruce Wayne O 1 NULL
CustStatusType указывает, открыт ли счет клиента («O») или объединен («M»).«).И затем у нас есть поле isMerged в качестве поля BIT, которое указывает, была ли учетная запись объединена, и, наконец, поле MergedTo, которое указывает, к какой учетной записи клиента была присоединена запись.
С предоставленным примером, что бы я хотелчтобы достичь, чтобы записи CustID 1 и 2 имели запись MergedTo, установленную на 3, тогда как CustID 3 можно либо обновить, либо оставить как есть.Для идентификаторов Cust 4, 5 и 6 - эти записи находятся и не нуждаются в обновлении.Но для идентификаторов Cust 8 - 10 мне бы хотелось, чтобы эти записи были установлены на 11 - как в таблице ниже.
CustID FName LName CustStatusType isMerged MergedTo
1 Kevin Smith M 1 4
2 Kevin Smith M 1 4
3 Kevin Smith M 1 4
4 Kevin Smith O 0 NULL
5 Mary Jones O 0 NULL
6 Wyatt Earp M 1 7
7 Wyatt Earp O 1 NULL
8 Bruce Wayn M 1 11
9 Brice Wayne M 1 11
10 Bruce Wane M 1 11
11 Bruce Wayne O 1 NULL
Я не смог выяснить, как этого добиться с помощью TSQL - предложения?
Данные испытаний:
DROP TABLE IF EXISTS #Customers;
CREATE TABLE #Customers
(
CustomerID INT ,
FirstName VARCHAR (25) ,
LastName VARCHAR (25) ,
CustomerStatusTypeID VARCHAR (1) ,
isMerged BIT ,
MergedTo INT
);
INSERT INTO #Customers
VALUES ( 1, 'Kevin', 'Smith', 'M', 1, 2 ) ,
( 2, 'Kevin', 'Smith', 'M', 1, 3 ) ,
( 3, 'Kevin', 'Smith', 'M', 1, 4 ) ,
( 4, 'Kevin', 'Smith', 'O', 0, NULL ) ,
( 5, 'Mary', 'Jones', 'O', 0, NULL ) ,
( 6, 'Wyatt', 'Earp', 'M', 1, 7 ) ,
( 7, 'Wyatt', 'Earp', 'O', 1, NULL ) ,
( 8, 'Bruce', 'Wayn', 'M', 1, 10 ) ,
( 9, 'Brice', 'Wayne', 'M', 1, 10 ) ,
( 10, 'Bruce', 'Wane', 'M', 1, 11 ) ,
( 11, 'Bruce', 'Wayne', 'O', 1, NULL );
SELECT *
FROM #Customers;
DROP TABLE #Customers;