【问题标题】:T-SQL SELECT DISTINCT & ROW_NUMBER() OVER Ordering ProblemT-SQL SELECT DISTINCT & ROW_NUMBER() OVER 排序问题
【发布时间】:2010-02-19 04:04:09
【问题描述】:

我正在尝试使用 ROW_NUMBER() OVER 从视图中选择 DISTINCT 行进行分页。当我将 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 tsql paging


    【解决方案1】:

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

    【讨论】:

    • 这似乎是有道理的,除了我的结果中没有任何重复的行。
    【解决方案2】:

    您得到的 RowId 值是否正确?也许您只需要外部查询的 ORDER BY RowId 子句?

    【讨论】:

    • 好电话。我应该看到的。谢谢。
    【解决方案3】:

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

    【讨论】:

    • 这个查询工作正常:SELECT Title, HitCount FROM (SELECT DISTINCT Title, HitCount FROM ou_v_Articles T) AS Temp ORDER BY HitCount DESC 除了我需要 ROW_NUMBER 进行分页。
    猜你喜欢
    • 2012-06-14
    • 2012-06-27
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2012-07-20
    • 2011-12-10
    相关资源
    最近更新 更多