我正在尝试将每家公司的联系值更新为默认值。我不在乎哪个联系人,但是只能有一个默认联系人。
这是布局的一个例子
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)
失败(错误)
答案 0 :(得分: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
中使用正确的字段。