Sql 更改列以指示在单独的列中存在重复项?
我有一个表,其中一列,列a有重复的值。我还有一个空白列_指示符,对于列_a中的值多次出现的所有情况,我都希望用1填充该指示符 我知道如何选择副本,并使用了以下公式: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
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行错误语法。我在上面的代码中将表引用更改为别名表。看看这是否解决了问题。