我需要更新包含多个值的字段的一个值。我曾尝试顶部1,最小值,最大值,我不能让它开始工作

问题描述 投票:0回答:1

我试图更新一个接触值出每家公司很多是默认的。我不在乎它接触,但只能有一个默认值。

下面是布局的示例

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(错误)

sql sql-server ssms-2016
1个回答
0
投票

使用可更新的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

© www.soinside.com 2019 - 2024. All rights reserved.