Мне нужно обновить одно значение поля, которое содержит несколько значений. Я пробовал Top 1, Min, Max, и я не могу заставить его работать
Я пытаюсь обновить одно значение контакта из многих для каждой компании, чтобы оно было значением по умолчанию. Мне все равно, какой контакт, но может быть только один по умолчанию.
Вот пример макета
Table: companyemail
Company field: cmp_id 6-8 digit varchar
Contact field: contact_name 50 digit varchar
Default Contact: ce_defaultcontact possible boolean values is Y or N
У меня есть эти данные
Company: ABCDEF
Contact: John Doe Default: N
Jane Doe Default: N
John Smith Default: N
И это существует во многих компаниях. Я пытаюсь обновить таблицу в SQL, чтобы установить только 1 контакт по умолчанию. Я пробовал следующее
1.
update companyemail
set ce_defaultcontact = 'Y'
where contact_name = (
Select Top 1 contact_name
From companyemail
Where ce_defaultcontact = 'N'
Order by contact_name DESC )
FAIL (Only set 1 contact to Y)
2.
update companyemail
set ce_defaultcontact = 'Y'
where contact_name = (
Select Max(companyemail.contact_name) from companyemail)
FAIL (ошибка)
1 ответ
Используйте обновляемые CTE и row_number()
:
with toupdate as (
select ce.*, row_number() over (partition by cmp_id order by newid()) as seqnum
from companyemail ce
)
update toupdate
set ce_defaultcontact = 'Y'
where seqnum = 1;
Я предполагаю, что cmp_id
идентифицирует компании. Если это неправильное поле, используйте правильное поле в partition by
,