2012-04-05 82 views
4

我想排名排名中的行而不跳過排名中的數字。請看下面的例子。使用SQL Server排名函數排名行而不跳過排名數字

CREATE TABLE #test(
apples int NOT NULL, 
) ON [PRIMARY] 
GO 

insert into #test(apples) values (10) 
insert into #test(apples) values (10) 
insert into #test(apples) values (20) 
insert into #test(apples) values (30) 

select *, RANK() over (order by apples) as theRank from #test 

drop table #test 
go 

結果是

apples theRank 
10  1 
10  1 
20  3 
30  4 

我怎樣才能獲得等級不跳過2號,這樣的結果看起來像

apples theRank 
10  1 
10  1 
20  2<-- 
30  3<-- 

我沒有使用秩函數,只要我得到所需的順序。

謝謝!

回答

7

嘗試使用DENSE_RANK代替RANK

select *, DENSE_RANK() over (order by apples) as theRank from #test 
+2

完全一樣的答案噸甚至拼寫和標點。我會刪除我的答案,因爲它看起來像你的複製和粘貼,你打敗了我2分鐘。 – 2012-04-05 23:57:35

+0

哈哈,偉大的思想...... – 2012-04-06 01:54:37

+0

優秀!!!非常感謝你! – davomarti 2012-04-06 04:35:42