Sql server 删除重复数据

以下内容抄自 : https://www.cnblogs.com/springsnow/p/10334469.html

非常感谢此博主,  为了防止此链接丢失, 特写此文章进行记录,以便后面使用

 

目录

1. 数据库表

2. 查看是否存在重复数据

3. 删除重复数据 ------ 有唯一列

4. 删除重复数据 ------ 无有唯一列 (使用ROW_NUMBER()函数删除重复记录)


1. 数据库表 

 

      ( 表中 ID 唯一)                                           (表中 ID 不唯一)

 

2. 查看是否存在重复数据

select Name from Student group by  Name having count(Name) > 1

 

3. 删除重复数据 ------ 有唯一列

通过唯一列最大或最小方式删除重复记录.

检查表中是否有主键或者唯一值的列, 当前可以数据看到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 )

4. 删除重复数据 ------ 无有唯一列 (使用ROW_NUMBER()函数删除重复记录)

如果表中没有唯一值的列,可以通过 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)