【问题标题】:Row_Number Over Where RowNumber betweenRow_Number Over Where RowNumber 之间
【发布时间】:2013-10-06 09:08:50
【问题描述】:

我正在尝试使用 row_number 从我的表中选择某些行。但是sql会提示错误msg“Invalid column name 'ROWNUMBERS'”。谁能纠正我?

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

【问题讨论】:

  • 绝对不是 MySQL。

标签: sql-server


【解决方案1】:

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

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

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

【讨论】:

  • 是的,第 1000 个答案! :D +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 的查询的第三页。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2014-05-08
    • 2016-03-28
    • 2014-12-01
    相关资源
    最近更新 更多