我正在尝试将每个公司的多个联系人值中的一个更新为默认值。我不关心哪个联系人,但只能有一个默认值。
以下是布局的一个示例
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)update companyemail
set ce_defaultcontact = 'Y'
where contact_name = (
Select Max(companyemail.contact_name) from companyemail)失败(错误)
发布于 2019-02-05 05:48:30
使用可更新的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中使用正确的字段。
https://stackoverflow.com/questions/54524784
复制相似问题