2011-08-25 61 views
1
select 
    row_number() over (order by (select 1)) as Rank, 
SalesAmount 
from 
    dbo.FactInternetSales 

这会给你:排名函数在SQL Server 2008中

  Rank,  SalesAmount 
      1,   3578.27 
      2,   3399.99 
      3,   3399.99 
      4,   699.0982 
      5,   799.0982 

,但我想是这样的:最多跳过我通过@skipnum(如10)

  Rank,  SalesAmount 
      11,   3578.27 
      12,   3399.99 
      13,   3399.99 
      14,   699.0982 
      15,   799.0982 

SQL Server 2008中是否有使用排名函数而不是游标来获得这样的结果?

回答

1
select 
    @skipnum + row_number() over (order by (select 1)) as Rank, 
    SalesAmount 
from 
    dbo.FactInternetSales 
2
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) + @skipnum AS [Rank], ... 

但是为什么您使用SELECT 1指示的等级?实际上排名不应该是有意义的,例如ORDER BY SalesAmount DESC?此外,如果你希望他们回来的11,12,13 ...你应该添加一个外ORDER BY ...

2

只需添加@skipnum的功能

select 
    row_number() over (order by (select 1)) + @skipnum as Rank, 
    SalesAmount 
from 
    dbo.FactInternetSales 

OVER (ORDER BY (SELECT 1))意味着任意顺序所以我希望它只是为了这个问题...

+0

也许不是“随机”?更像未知的订单。它不能用于像'使用newid()'命令那样得到一个随机行。 –

+1

@Mikael Eriksson:更改为“任意”,更正确 – gbn