找到排名

时间:2012-10-13 17:31:39

标签: sql sql-server

我有一张包含一些记录的表格,我想检查行的等级,如果等级大于100,我会设置权限。
我编写流动的代码来查找记录的排名,但是当我使用rank或row_number函数而没有额外的字段(如用户名或系列)时,虽然它可以与其中一个字段一起使用,但它不起作用。

SELECT * from
(Select username,
Rank() over(order by point desc) as  'ranking' 
from student) t
 where (username='test')

我想查找记录并设置一个具有此记录等级的变量。

3 个答案:

答案 0 :(得分:1)

我不知道你的sql ser版本是否支持cte。如果是> = 2005 sqlserver this is your query

create table #student ( username varchar(10), point int );

insert into #student values
( 'a', 10 ),
( 'b', 20 ),
( 'test', 15 );

declare @var int;

with cte as (
  select username,
  Rank() over(order by point desc) as  [ranking] 
  from #student
)
select  @var = [ranking]  from cte where username = 'test';
print str( @var );

结果:

2

答案 1 :(得分:0)

可能是这个查询?

Select count(*)+1 as rank from student 
where point > (select point from student where username = 'test')

我应该返回点数少于所选用户的用户数

答案 2 :(得分:0)

要使RANK生效,您需要指定要对其进行排名的PARTITION BY列,然后ORDER BY就像是出现像Rank列这样的情况具有相同的值并且存在冲突,然后按列排序将通过对这些冲突的记录进行排序来解决问题。