我试图更新一个接触值出每家公司很多是默认的。我不在乎它接触,但只能有一个默认值。
下面是布局的示例
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(错误)
使用可更新的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
。