T-SQL SELECT DISTINCT& ROW_NUMBER()订购问题

时间:2010-02-19 04:04:10

标签: sql-server tsql paging

我正在尝试使用ROW_NUMBER()OVER从视图中选择DISTINCT行进行分页。当我将ORDER BY字段从SMALLDATETIME切换到INT时,我开始得到奇怪的结果:

SELECT RowId, Title, HitCount FROM
( SELECT DISTINCT Title, HitCount, ROW_NUMBER() OVER(ORDER BY HitCount DESC) AS RowId FROM ou_v_Articles T ) AS Temp
WHERE RowId BETWEEN 1 AND 5

此查询返回:

RowId | Title | HitCount
=======================
4  ---  9
1  ---  43
3  ---  11
2  ---  13
5  ---  0

结果显然不是正确的顺序。我不确定这里有什么问题,但当我删除DISTINCT时,它会正确地命令它们。

感谢。

3 个答案:

答案 0 :(得分:5)

将DISTINCT应用于包含ROW_NUMBER()的列列表将始终导致每一行都不同,因为每行有一个ROW_NUMBER。

答案 1 :(得分:2)

RowId值是否正确?也许你只需要外部查询的ORDER BY RowId子句?

答案 2 :(得分:1)

您是否尝试过在外部选择中使用订单并删除OVER子句?