我有一张表格可以将联系人与公司联系起来。当添加多个联系人时,可以选择设置"主要"或者"中学"联系。然而,当人们添加联系人时,他们还没有使用此功能。该程序已被修改,因此它会自动将添加到公司的第一个联系人标记为主要联系人,但不会修复已输入的数据。
我想轮询该表,并说每个CompanyID只有一条记录,将PrimaryContact设置为true,但我无法弄清楚如何执行此操作。对于任何分配了多个联系人的公司,我不想做任何事情。例如:
CompanyID ContactID PrimaryContact
1 285 0
2 375 0
3 761 0
4 1744 0
4 2301 0
6 335 0
6 4987 0
9 809 0
9 2119 0
10 99 0
11 99 0
在上面的示例中,CompanyID 4,6和9有多个条目,因此我不想触摸它们。但是1,2,3,10和11有单个条目,所以我想将这些行的PrimaryContact设置为1。
如何做到这一点?
答案 0 :(得分:2)
您希望MS SQL Server使用的语法是:
update contacts
set PrimaryContact = 1
where CompanyID in (
select CompanyID
from contacts
group by CompanyID
having count(distinct ContactID) = 1
)
此问题之前被标记为MySQL,下面的原始答案适用于此。
<击> 这是一种方法:
update contacts as c
inner join
(
select CompanyID
from contacts
group by CompanyID
having count(distinct ContactID) = 1
) t on c.CompanyID= t.CompanyID
set PrimaryContact = 1;
在派生表中,您可以找到具有一个ContactID的CompanyID。然后,该查询的结果将与应更新的表连接。
击><击> Sample SQL Fiddle 击>