2010-02-19 159 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