Таблица 1 (Ключевые поля - идентификатор, учетная запись)
Таблица 2 (Ключевые поля - Id, Account, Code)
Table1.SalesRepID должен быть обновлен с помощью Table2.SalesRepID, когда Table2.Sequence = 1. (Есть 10 последовательностей, каждая из которых имеет SalesRedID).
UPDATE Table1 SET SalesRepID =
(select SalesRepID from Table2
where Table1.ID = Table2.ID and
Table1.Account = Table2.PatientAccount and Table2.Sequence = 1)
Это вызывает ошибку -
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Пожалуйста, дайте мне знать, что следует исправить в заявлении об обновлении? Следует ли использовать MERGE?
Какую часть ошибки вы не понимаете?
У вас есть несколько строк в Table2
, которые соответствуют условиям. Вы можете найти их, используя:
select id, PatientAccount
from table2
where sequence = 1
group by id, PatientAccount
having count(*) > 1;
Вы можете заставить свой запрос работать, используя:
update Table1
set SalesRepID = (select top (1) t2.SalesRepID
from Table2 t2
where Table1.ID = t2.ID and
Table1.Account = t2.PatientAccount and
t2.Sequence = 1
);
Однако это подход / взлом методом грубой силы. Вам действительно нужно выяснить, что не так с данными (то есть, почему вы думаете, что подзапрос должен возвращать одну строку, когда он действительно возвращает несколько строк).
Вместо этого вам лучше использовать JOIN.
UPDATE t1
SET
t1.SalesRepID = t2.SalesRepID
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Account = t2.PatientAccount AND t2.Sequence = 1
Будет намного проще поддерживать и расширять.
Если существует более одной записи, для которой используется
Table2.Sequence = 1
, ваша логика обновления сама по себе не имеет смысла, потому что неясно значение который, которое вы хотите использовать в обновлении. Для достижения наилучших результатов добавьте к вашему вопросу несколько примеров данных.