2012-02-28 74 views
3

嗨我試圖查詢基於ROW_NUMBER()函數的數據。從ROW_NUMBER查詢數據結果

SELECT ROW_NUMBER() OVER(ORDER BY Id) AS CountRow, 
ProductId, ProductName, Tracklink, ProductImage, TrackPrice FROM ProductDetails; 

我有我的行CountRow列中的數字。現在我想查詢這個別名來查找31到40之間的行。但是我得到一個錯誤,說CountRow不存在。

我該如何解決這個問題?

感謝....

+2

包裝此查詢,並從中選擇...不要嘗試所有在同一條款 – Randy 2012-02-28 14:00:36

回答

2
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY Id) AS CountRow, 
ProductId, ProductName, Tracklink, ProductImage, TrackPrice FROM ProductDetails) AS A 
WHERE CountRow BETWEEN 31 AND 40 

希望這有助於。

+0

這與@Shark有什麼不同嗎?回答5分鐘前? – Arion 2012-02-28 14:08:08

+1

它沒有linebreaks(?) – Gaspa79 2012-02-28 14:10:57

+0

當我打開頁面時沒有任何人回答。我進行了測試,以確保我爲您發佈正確的答案,並在那段時間內回覆了兩個答案。我只在點擊Add Answer按鈕後纔看到它們。是的,沒有換行符,但幾乎相同。 – Kaf 2012-02-28 14:12:48

4

不能在WHERE子句中引用一個別名。它包裝在一個子查詢,你會被罰款:

select * 
from 
(
    SELECT ROW_NUMBER() OVER(ORDER BY Id) AS CountRow, 
    ProductId, ProductName, Tracklink, ProductImage, TrackPrice FROM ProductDetails 
) a 
where CountRow between 31 and 40 
+0

這是正確的解決方案= - ) – Gaspa79 2012-02-28 14:10:10

3

如果你的DBMS支持CTE你可以做這樣的:

;WITH CTE 
(
    SELECT 
     ROW_NUMBER() OVER(ORDER BY Id) AS CountRow, 
     ProductId, 
     ProductName, 
     Tracklink, 
     ProductImage, 
     TrackPrice 
    FROM 
     ProductDetails 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    CTE.CountRow between 31 and 40