2011-08-25 74 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