我是SQL Server的新手
这是我的表结构:
id int
name string
value int
示例数据:
id name value
-------------
1 a 20
2 b 30
3 c 10
4 d 50
5 e 60
6 f 60
我需要得到这个结果
id name value rank
------------------
1 a 20 2
2 b 30 3
3 c 10 1
4 d 50 4
5 e 60 5
6 f 60 5
我经过一些搜索后尝试了这个查询
SELECT
*, rank = ROW_NUMBER(OVER ORDER BY value)
FROM table
但它似乎没有得到我想要的东西?
答案 0 :(得分:2)
使用RANK
代替ROW_NUMBER
获取排名(如果您确实希望排名分为1,2,3,4而不是1,2,请使用DENSE_RANK
, 3,5,6)
答案 1 :(得分:2)
这就是你要做的事情:
select *,DENSE_RANK() OVER
(order by value) AS Rank
from Table1
order by id
结果:
ID NAME VALUE RANK
1 a 20 2
2 b 30 3
3 c 10 1
4 d 50 4
5 e 60 5
6 f 60 5
请参阅SQL Fiddle中的结果。
详细了解DENSE_RANK
here。
答案 2 :(得分:0)
其中任何一个都应该有效:
SELECT *, RANK() OVER (ORDER BY value) AS rank
FROM table
SELECT *, DENSE_RANK() OVER (ORDER BY value) AS rank
FROM table