Row_Number在RowNumber之间的位置

时间:2013-09-30 13:18:49

标签: sql-server

我尝试使用row_number从表中选择某些行。但是,sql会提示错误消息“无效的列名'ROWNUMBERS'”。任何人都可以纠正我吗?

SELECT ROW_NUMBER() OVER (ORDER BY  Price ASC) AS ROWNUMBERS, * 
FROM Product
WHERE  ROWNUMBERS BETWEEN  @fromCount AND @toCount

2 个答案:

答案 0 :(得分:19)

由于正在进行逻辑查询处理,尝试引用WHERE子句中的别名列不起作用。在WHERE子句之前评估SELECT。因此,在评估ROWNUMBERS时,列WHERE不存在。

在此示例中引用列的正确方法是:

SELECT a.*
FROM
    (SELECT ROW_NUMBER() OVER (ORDER BY  Price ASC) AS ROWNUMBERS, * 
    FROM Product) a
WHERE a.ROWNUMBERS BETWEEN @fromCount AND @toCount

供您参考,操作顺序为:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

答案 1 :(得分:2)

这里有另一个答案可以解决报告的特定错误。但是,我也想解决更广泛的问题。它看起来很像你在这里做的是分页你的结果显示。如果是这种情况,并且如果您可以使用Sql Server 2012,那么现在有更好的方法。看看OFFSET/FETCH

SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY First Name 
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;

这将显示页面大小为5的查询的第三页。