2010-02-19 58 views
4

我试图从视图中选择DISTINCT行,使用ROW_NUMBER()OVER进行分页。当我切换ORDER BY字段从SMALLDATETIME为INT,我开始越来越怪异的结果:T-SQL SELECT DISTINCT&ROW_NUMBER()OVER订购问题

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时,它会正确地命令它们。

谢谢。

回答

2

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

+0

良好的通话。我应该看到这一点。谢谢。 – Joel 2010-02-19 04:22:53

5

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

+0

这似乎是有道理的,除非我的结果没有得到任何重复的行。 – Joel 2010-02-19 04:12:18

1

您是否尝试过使用外部选择命令并删除OVER子句?

+0

嗯,这查询工作正常: SELECT标题,HitCount FROM (SELECT DISTINCT标题,HitCount FROM ou_v_Articles T)AS临时ORDER BY HitCount DESC 除了我需要分页ROW_NUMBER。 – Joel 2010-02-19 04:16:40