2010-02-19 8 views
4

J'essaie de sélectionner des lignes DISTINCT à partir d'une vue en utilisant ROW_NUMBER() OVER pour la pagination. Quand je suis passé ORDER BY d'un champ SMALLDATETIME INT j'ai commencé à obtenir des résultats étranges:T-SQL SELECT DISTINCT & ROW_NUMBER() OVER Problème de commande

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 

Cette requête renvoie:

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

Les résultats ne sont évidemment pas dans le bon ordre. Je ne suis pas sûr de ce que le problème est ici, mais quand j'ai supprimé DISTINCT il les ordonne correctement.

Merci.

Répondre

2

La valeur RowId que vous obtenez est-elle correcte? Peut-être avez-vous juste besoin d'une clause ORDER BY RowId sur la requête externe?

+0

Bon appel. J'aurais dû voir ça. Merci. – Joel

5

L'application de DISTINCT à une liste de colonnes contenant ROW_NUMBER() entraîne toujours la distinction de chaque ligne, car il y a un ROW_NUMBER par ligne.

+0

Cela semblerait logique, sauf que je n'obtiens pas de lignes en double dans mes résultats. – Joel

1

Avez-vous essayé d'utiliser une commande par sur la sélection externe et en supprimant la clause OVER?

+0

Eh bien cette requête fonctionne très bien: SELECT Titre, HitCount DE (SELECT DISTINCT Titre, HitCount DE ou_v_Articles T) Temp ORDER BY HitCount DESC Sauf que je besoin du ROW_NUMBER pour la pagination. – Joel