2012-02-28 45 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