首页 > 解决方案 > 比较三列数据并在第四列设置标志

问题描述

在此处输入图像描述

我有上面的表格结构,其中第 1、第 3 和第 5 行是相同的。表中可能有很多记录,但我只是将其用作示例。因此,如果 A 列、B 列和 C 列的数据相同,那么我必须将标志列更新为是,否则否。我使用的是 SQL Server 2019。

我尝试使用以下查询更新标志列中唯一的“是”:

update table set Flag='Yes' where (SELECT Column A, Column B, Column C, COUNT(*) FROM Table GROUP BY Column A, Column B, Column C HAVING COUNT(*)>1 )

但出现以下错误:

在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'。

任何帮助,将不胜感激。

标签: sqlsql-server

解决方案


如果要更新,可以使用可更新的 CTE:

with toupdate as (
      select t.*, count(*) over (partition by a, b, c) as cnt
      from t
     )
update toupdate
    set flag = 'yes'
    where cnt > 1;

我建议修复表格,使行不会 100% 重复——但也许您还有问题中未提及的其他列。


推荐阅读