Sql 更改列以指示在单独的列中存在重复项?

Sql 更改列以指示在单独的列中存在重复项?,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我有一个表,其中一列,列a有重复的值。我还有一个空白列_指示符,对于列_a中的值多次出现的所有情况,我都希望用1填充该指示符 我知道如何选择副本,并使用了以下公式: SELECT [dbo].[myTable].[column_A], COUNT(*) FROM [dbo].[myTable] GROUP BY [dbo].[myTable].[column_A] HAVING COUNT(*) > 1 如何更新列_指示器?我试过: UPDATE [dbo].[myTable] SET

我有一个表,其中一列,列a有重复的值。我还有一个空白列_指示符,对于列_a中的值多次出现的所有情况,我都希望用1填充该指示符

我知道如何选择副本,并使用了以下公式:

SELECT [dbo].[myTable].[column_A], COUNT(*)
FROM [dbo].[myTable]
GROUP BY [dbo].[myTable].[column_A]
HAVING COUNT(*) > 1
如何更新列_指示器?我试过:

UPDATE [dbo].[myTable]
SET [dbo].[myTable].[column_indicator] = 1
WHERE
GROUP BY [dbo].[myTable].[column_A]
HAVING COUNT(*) > 1

我知道我不正确,但无法确定如何继续此列更新。

您可以在公用表表达式中进行窗口计数,然后更新它:

WITH cte AS (
    SELECT 
        [column_indicator],
        [column_A], 
        COUNT(*) OVER(PARTITION BY [column_A]) cnt
    FROM [dbo].[myTable]
)
UPDATE cte SET [column_indicator] = 1 WHERE cnt > 1

我认为您也可以使用嵌套的更新查询来解决这个问题

UPDATE [dbo].[myTable] SET [column_indicator] = 1  
FROM  
(  
    SELECT a.[column_A],a.[column_indicator], COUNT(*) AS COUNT 
    FROM (select [dbo].[myTable].[column_A],[dbo].[myTable].[column_indicator]
      from [dbo].[myTable]) a
    GROUP BY a.[column_A],a.[column_indicator]
    having COUNT > 1
) t  
WHERE [dbo].[myTable].[column_A] = t.[column_A]; 

我收到错误消息Msg 4104,级别16,状态1,第3行多部分标识符“~[myTable].[column_indicator]~”无法绑定。我刚刚尝试并在关键字“GROUP”附近获得Msg 156,级别15,状态1,第17行错误语法。我在上面的代码中将表引用更改为别名表。看看这是否解决了问题。