create table Student(
ID varchar(10) not null,
Name varchar(10) not null,
);
insert into Student values("1", "zhangs");
insert into Student values("2", "zhangs");
insert into Student values("3", "lisi");
insert into Student values("4", "lisi");
insert into Student values("5", "wangwu");

删除Name重复多余的行,每个Name仅保留1行数据
select Name from Student group by Name having count(Name) > 1

检查表中是否有主键或者唯一值的列,当前可以数据看到ID是唯一的,可以通过Name分组排除掉ID最大或最小的行
delete from Student where Name in( select Name from Student group by Name having count(Name) > 1) and ID not in(select max(ID) from Student group by Name having count(Name) > 1 )
执行删除脚本后查询

如果表中没有唯一值的列,可以通过row_number 来删除重复数据
重复执行插入脚本,查看表数据,表中没有唯一列值

Delete T From (Select Row_Number() Over(Partition By [Name] order By [ID]) As RowNumber,* From Student)T Where T.RowNumber > 1
小知识点
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
表示根据COLUMN分组,在分组内部根据 COLUMN排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
函数“Row_Number”必须有 OVER 子句。OVER 子句必须有包含 ORDER BY
Row_Number() Over(Partition By [Name] order By [ID]) 表示已name列分组,在每组内以ID列进行升序排序,每组内返回一个唯一的序号
执行删除脚本后查询表数据

到此这篇关于SQL Server删除表中重复数据的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关文章:
1. SQL Server中T-SQL标识符介绍与无排序生成序号的方法2. SQL Server如何通过SQL语句直接操作另一台服务器上的SQL SERVER的数据3. 安装SQL Server2019详细教程(推荐!)4. Sql Server 压缩数据库日志文件的方法5. SQL Server2019安装的详细步骤实战记录(亲测可用)6. SQL Server数据库备份和恢复数据库的全过程7. SQL Server中搜索特定的对象8. SQL Server主键与外键设置以及相关理解9. SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串10. SQL Server修改数据的几种语句详解