我試着從我的表中使用row_number來選擇某些行。但是,sql將提示錯誤消息「無效的列名'ROWNUMBERS'」。任何人都可以糾正我?Row_Number在哪裏RowNumber之間
SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, *
FROM Product
WHERE ROWNUMBERS BETWEEN @fromCount AND @toCount
我試着從我的表中使用row_number來選擇某些行。但是,sql將提示錯誤消息「無效的列名'ROWNUMBERS'」。任何人都可以糾正我?Row_Number在哪裏RowNumber之間
SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, *
FROM Product
WHERE ROWNUMBERS BETWEEN @fromCount AND @toCount
試圖引用這個別名的列的WHERE
子句中,因爲邏輯查詢處理正在發生的無法正常工作。在SELECT
子句之前評估WHERE
。因此,當評估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
供您參考,對於操作的順序是:
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
這絕對不是MySQL的。 –