T-SQL SELECT DISTINCT & ROW_NUMBER () ЗАДАЧА Порядок заказа - PullRequest
4 голосов
/ 19 февраля 2010

Я пытаюсь выбрать строки DISTINCT из представления, используя ROW_NUMBER () OVER для подкачки. Когда я переключил поле 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 ]

5 голосов
/ 19 февраля 2010

Применение DISTINCT к списку столбцов, содержащему ROW_NUMBER (), всегда приводит к тому, что каждая строка различна, поскольку в каждой строке есть один ROW_NUMBER.

2 голосов
/ 19 февраля 2010

Правильно ли указано значение RowId? Возможно, вам просто нужно предложение ORDER BY RowId для внешнего запроса?

1 голос
/ 19 февраля 2010

Вы пробовали просто использовать заказ by на внешнем select и удалить предложение OVER?

...