1

我必须按行删除重复的值,以便只剩下唯一的行。

假设我的表中有以下值。

no   code       name
1    001        ronald
1    001        NULL
2    002        peter
2    002        peter
3    003        john
3    003        john
4    004        NULL
4    004        chris

我必须删除重复的记录,以便预期的输出是:

no   code       name
1    001        ronald
2    002        peter
3    003        john
4    004        chris

我尝试使用 distinct 并将结果插入临时表,但它不起作用。

有没有人对此有任何解决方案?

4

2 回答 2

1
delete T
from (
     select row_number() over(partition by no order by name desc) as rn
     from YourTable
     ) as T
where rn > 1

SE-数据

于 2012-08-03T06:15:36.800 回答
0

您可以将记录插入到带有标识字段的临时表中。然后通过上面显示的 No 或 Code 值删除 max / min 值,然后使用您创建的新表删除并重命名现有表,或从现有表中删除数据并替换为您插入并清理的数据新表。

所以:

  1. 将上面显示的源表中的所有数据加载到带有标识字段的新表中。

  2. 使用 CTE 或子查询编写删除语句以确定最小值/最大值或其他条件,从而为您返回要删除的行的不同值。

  3. 用清理后的数据替换上面现有表中的数据...或删除现有表并重命名您创建和清理的表。

于 2012-08-03T02:55:44.483 回答