Мне нужно обновить одно значение поля, которое содержит несколько значений. Я пробовал 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,

Другие вопросы по тегам