在执行SQL查询时需要帮助

时间:2014-03-16 07:55:21

标签: sql-server

我是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 

但它似乎没有得到我想要的东西?

3 个答案:

答案 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