T-SQL SELECT DISTINCT & ROW_NUMBER() OVER 排序问题

问题描述 投票:0回答:3

我正在尝试使用 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 时,它对它们进行了正确的排序。

谢谢。

sql-server t-sql pagination
3个回答
5
投票

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


2
投票

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


1
投票

您是否尝试过在外部选择上仅使用 order by 并删除 OVER 子句?

© www.soinside.com 2019 - 2024. All rights reserved.