2013-09-30 25 views
5

我試着從我的表中使用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 
+2

這絕對不是MySQL的。 –

回答

19

試圖引用這個別名的列的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 

供您參考,對於操作的順序是:

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

@ 0070 [這是演示](http://sqlfiddle.com/#!3/a1538/2)。 – Kermit

+2

耶,第1000個答案! :D +1 – Doorknob

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

相關問題