我必须按行删除重复的值,以便只剩下唯一的行。
假设我的表中有以下值。
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并将结果插入临时表,但它不起作用。
有没有人对此有任何解决方案?
答案 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
答案 1 :(得分:0)
您可以将记录插入带有标识字段的临时表中。然后通过上面显示的“否”或“代码”值删除最大/最小值,然后使用您创建的新表删除并重命名现有表,或者从现有表中删除数据,并替换为您插入并清理的数据。新表。
所以:
将上面显示的源表中的所有数据加载到带有标识字段的新表中。
使用CTE或子查询编写删除语句,以确定最小/最大或其他条件,为您提供要删除的行的不同值。
将上面现有表中的数据替换为已清理的数据...或删除现有表并重命名您创建和清理的表。