我正在尝试使用 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
我正在尝试使用 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
由于发生了逻辑查询处理,尝试在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
供您参考,操作顺序为:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
这里还有另一个答案可以解决报告的特定错误。但是,我也想解决更广泛的问题。看起来很像您在这里所做的分页显示结果。如果是这样的话,如果你可以使用 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 的查询的第三页。