利用row_number() ,over和partition by 语句来操作指定字段重复的数据

软件:sql server 2014
核心语句:
select row_number() over (
partition by 重复字段 order by 排序字段
) as flag, * from 表名

1 准备语句:

drop table eDelRepeatData
create table eDelRepeatData
    (
        ID int identity(1,1) ,
        aaa int,
        bbb  int,
        ccc int
        )
Insert Into eDelRepeatData(aaa,bbb,ccc)
    Select 1,2,3
    union all
    Select 1,2,3
    union all
    Select 1,2,3
    union all
    Select 3,2,1
    union all
    Select 3,2,1
    union all
    Select 4,5,6

测试下:select * from eDelRepeatData
图1
由结果见,字段aaa,bbb,ccc三个字段都重复的数据有ID为1,2,3这三条重复,4,5重复;

2 接下来就是对数据进行分组:

select row_number() over (
    partition by aaa, bbb, ccc order by id
) as flag, * from eDelRepeatData

结果为:
图2
对比上面的select * from eDelRepeatData,发现多了一个flag字段,而且flag不为1的数据均为我们要删除的重复数据,这样就好办了;

3 删除flag不为1的数据:

delete from eDelRepeatData 
    where id in (
        select id from (
            select row_number() over (
                partition by aaa, bbb, ccc order by id
            ) as flag, * from eDelRepeatData
        ) a where flag<>1
    )

执行结果为:
图3
ID为1, 4, 6的数据保存,ID为2, 3, 5的重复数据删除了,完成指定功能;
**最后说明:
例子在sql server软件中F5跑下来再结合语句应该就能利用一开始的核心语句来完成指定字段的重复语句的操作(查询和删除),即使你不懂得row_number(), partitionby, over()这些是什么 ,本篇文章用来快速地解决处理指定字段的重复数据的问题;
**

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值