您的位置:首页 > 其它

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

2014-03-15 00:29 330 查看
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 也相同的,就只能通过【游标】来实现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: