使用 ROW_NUMBER OVER() 删除相同记录

ROW_NUMER OVER(PARTITION BY col1,col2 ORDER BY col3) rn

该函数会对行进行分组和排序。(限 sql server 2005 及以上版本)

以下就使用该函数删除表的相同记录:

--测试
DECLARE @t TABLE
( id INT,
  sname VARCHAR(30),
  sage INT)
  
INSERT INTO @t
SELECT 1,'sky1',21
UNION ALL
SELECT 2,'sky1',21
UNION ALL
SELECT 3,'sky1',21
UNION ALL
SELECT 4,'sky2',23
UNION ALL
SELECT 5,'sky2',23
UNION ALL
SELECT 6,'sky3',24

DELETE FROM t1
       FROM @t t1 JOIN 
    (SELECT *,
            ROW_NUMBER() OVER(PARTITION BY sname,sage ORDER BY id) rn
       FROM @t) t2 ON t1.id = t2.id
      WHERE t2.rn != 1
			 				  
SELECT * FROM @t

这里的相同是指除了 id 不同其它字段完全相同的。

如果要删除连 id 也相同的,就只能通过【游标】来实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值