Мне нужно обновить одно значение поля, которое содержит несколько значений.Я пробовал Top 1, Min, Max, и я не могу заставить его работать - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь обновить одно значение контакта из множества для каждой компании, чтобы оно было значением по умолчанию.Мне все равно, какой контакт, но может быть только один по умолчанию.

Вот пример макета

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 Ответ

0 голосов
/ 05 февраля 2019

Используйте обновляемые 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.

...