Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL:根据列更新唯一的行_Sql Server - Fatal编程技术网

Sql server SQL:根据列更新唯一的行

Sql server SQL:根据列更新唯一的行,sql-server,Sql Server,我有一张表格,可以将联系人与公司关联起来。添加多个联系人时,可以选择设置主联系人或辅助联系人。但是,当人们添加联系人时,他们没有使用此功能。该程序已修改,因此它会自动将添加到公司的第一个联系人标记为主要联系人,但这不会修复已输入的数据 我想对表格进行投票,然后说如果每个公司只有一条记录,我会将PrimaryContact设置为true,但我不知道如何做到这一点。对于任何分配了多个联系人的公司,我不想做任何事情。例如: CompanyID ContactID PrimaryContact

我有一张表格,可以将联系人与公司关联起来。添加多个联系人时,可以选择设置主联系人或辅助联系人。但是,当人们添加联系人时,他们没有使用此功能。该程序已修改,因此它会自动将添加到公司的第一个联系人标记为主要联系人,但这不会修复已输入的数据

我想对表格进行投票,然后说如果每个公司只有一条记录,我会将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


如何做到这一点?

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。然后将该查询的结果与应更新的表联接


我以前的查询错误,请尝试此查询更新contacts c1 set PrimaryContact=如果从contacts c2中选择count1,其中c2.CompanyID=c1.CompanyID按c2分组。CompanyID>1,0,1内部联接后的select语句使用单个条目1,2,3,10正确标识行,和11,但我无法使更新在MS SQL Server Management Studio 2014中作为一个整体工作。它似乎不喜欢c部分。因此,我对该表运行了查询,然后将结果复制到一个名为tCompanyIDs的新表中,其中只有CompanyID作为唯一字段。然后我在我的查询中使用了它:@Allan You用这个标签标记了这个问题,并且我的答案中的语法适用于该数据库。如果您使用的是MS SQL Server,请更改问题中的标记,我将更新我的答案。即使使用您的MySQL示例,我也可以修改它以使其正常工作,但感谢您发布SQL Server版本…我相信它会再次出现,我将再次引用。