使用PARTITION BY和ROW_NUMBER

时间:2016-01-28 10:29:10

标签: sql sql-server tsql window-functions

我一直在尝试编写脚本来查找重复记录。 然而,这将要求其中一个字段相同而另一个字段不同。我在SELECT中使用了以下2行。

ROW_NUMBER () OVER (PARTITION BY col_1 ORDER BY col_2) AS 'ROWNUMBER',
ROW_NUMBER () OVER (PARTITION BY col_2 ORDER BY col_1) AS 'ROWNUMBER2', 

一旦使用了我,然后从TEMP表中选择我的结果,其中两列都是> 1.现在这使得我的结果在一个环境中是正确的,但是当在另一个环境中运行相同的脚本时(周末备份),我的结果是不同的。

有人可以向我解释为什么会发生这种情况吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

你为什么使用row_number?这根本不是必需的,你应该使用group by:

SELECT col_1,col_2 from YourTable
group by col_1,col_2 having count(*) > 1

此查询将返回所有重复的行

编辑:如果您有第3列,根据它确定谁是副本,您应该这样做:

SELECT col_3 from yourTable
group by col_3 from yourTable having count(*) > 1