更新分组记录

Rob*_*ien 0 sql-server duplication update

我有以下查询返回重复值:

  SELECT 
    [t].[Field1], [t].[Field2], COUNT([t].[Field2]) 
  FROM [dbo].[Table1] AS [t]
  WHERE [t].[Field2] <> ''
  GROUP BY [t].[Field1], [t].[Field2]
  HAVING COUNT([t].[Field2]) > 1
Run Code Online (Sandbox Code Playgroud)

鉴于该声明,我想编写更新声明以Field2在这些条件下清除。我会怎么写这个?

Aar*_*and 5

您可以使用 CTE更简单地做到这一点:

;WITH x AS   
(
  SELECT 
    Field1, Field2, 
    c = COUNT(*) OVER(PARTITION BY Field1, Field2) 
  FROM dbo.Table1
  WHERE Field2 <> ''
)
UPDATE x SET Field2 = '' WHERE c > 1;
Run Code Online (Sandbox Code Playgroud)

或者使用更麻烦(并且可能效率更低,未测试)的自连接:

UPDATE t SET Field2 = ''
FROM dbo.Table1 AS t
INNER JOIN (SELECT Field1, Field2, c = COUNT(Field2)
            FROM dbo.Table1
            WHERE Field2 <> ''
            GROUP BY Field1, Field2
            HAVING COUNT(Field2) > 1) AS x
 ON x.Field1 = t.Field1
 AND x.Field2 = t.Field2;
Run Code Online (Sandbox Code Playgroud)