SQL查找重复项和更新表

时间:2014-08-17 17:26:06

标签: sql sql-server duplicates

我试图用Duplicate find查询更新一个表,我的表是由60k +记录组成的,在excel上做这个有点复杂,我的表看起来像这样

Serial_NO        .......确定重复

1        .......................好记录

2       .......................好记录

3       .......................好记录

1       .......................复制

这个想法只是通过检查整个" Serial_NO"来更新表中的最后一个或更近的重复条目。列和他们添加了“好记录”#39;或者'复制'在列"确定重复"。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

这假设桌子上有一个“id”字段,如评论中所示:

update tbl x
set x.[Determine Duplicate] = 'Good Record'
where x.id = (select min(y.id) from tbl y where y.[Serial_NO] = x.[Serial_NO]);

update tbl x
set x.[Determine Duplicate] = 'Duplicate'
where x.id > (select min(y.id) from tbl y where y.[Serial_NO] = x.[Serial_NO]);

答案 1 :(得分:0)

一种方法是使用ROW_NUMBER:

WITH t AS (
    SELECT 
         ROW_NUMBER() OVER (PARTITION BY Serial_NO ORDER BY Serial_NO) AS seq
        ,DetermineDuplicate
    FROM dbo.YourTable
    )
UPDATE t
SET DetermineDuplicate = CASE WHEN seq = 1 THEN 'Good Record' ELSE 'Duplicate' END;

答案 2 :(得分:0)

在考虑给出评论后,我认为以下答案符合您的要求。

UPDATE tbl
SET tbl.[Determine Duplicate] = tb.[Determine Duplicate]
FROM tb_src tbl
INNER JOIN
(
  SELECT t1.[Serial_NO],
         COALESCE(t2.isduplicate,'Good Record') AS [Determine Duplicate]
  FROM
  (
    SELECT DISTINCT t.[Serial_NO]
    FROM tb_src t
  ) t1
  LEFT OUTER JOIN tb_src t2
  ON t1.[sno] = t2.sno AND t2.isduplicate = 'Duplicate'
) tb
ON tb.[Serial_NO] = tbl.[Serial_NO]

使用上面的内容,您可以使用单个查询。

请注意:tb_src是您提供的表格。