Исходная таблица
Id, Name, Address
1 A #202
1 A #203
1 A #204
2 A #202
Целевой стол
Id, Name, Address
1 A NULL
После слияния
Id, Name, Address
1 A #202
2 A #202
Я использую этот SQL
create table #S (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
create table #T (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
INSERT #S values(1, 'A', '#202')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#204')
INSERT #T values(1, 'A', NULL)
MERGE #T USING
(
Select id, name, address
from #S
) AS S(id,name,address)
on #T.id=S.id and #T.Name=S.Name
when not matched THEN
INSERT values(S.id,S.Name, S.Address)
when matched then
update set Address = S.Address;
GO
Select * from #T
GO
Select * from #S
GO
Это вызывает ошибку
Сообщение 8672, уровень 16, состояние 1, строка 18
Инструкция MERGE пыталась ОБНОВИТЬ или УДАЛИТЬ одну и ту же строку более одного раза. Это происходит, когда целевая строка соответствует более чем одной исходной строке. Оператор MERGE не может ОБНОВИТЬ / УДАЛИТЬ одну и ту же строку целевой таблицы несколько раз. Уточните предложение ON, чтобы обеспечить соответствие целевой строки максимум одной исходной строке, или используйте предложение GROUP BY для группировки исходных строк.
Я хочу обновить строку в A значением Address из любого из трех совпадающих значений. Как это сделать?