如何使用Sql Server 2008删除具有重复值的行?

时间:2012-08-03 02:04:49

标签: sql-server-2008

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

假设我的表中有以下值。

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并将结果插入临时表,但它不起作用。

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

2 个答案:

答案 0 :(得分: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-Data

答案 1 :(得分:0)

您可以将记录插入带有标识字段的临时表中。然后通过上面显示的“否”或“代码”值删除最大/最小值,然后使用您创建的新表删除并重命名现有表,或者从现有表中删除数据,并替换为您插入并清理的数据。新表。

所以:

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

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

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