0

我有一个包含一些记录的表,我想检查行的排名,如果排名大于 100,我将设置权限。
我编写了流动代码来查找记录的等级,但是当我使用没有附加字段(如用户名或家庭)的 rank 或 row_number 函数时,它不起作用,尽管它确实适用于附加字段之一。

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

我想找到一条记录并设置一个具有该记录等级的变量。

4

3 回答 3

1

我不知道你的 sqlser 版本是否支持 cte。如果它是 >= 2005 sqlserver ,这是您的查询

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
于 2012-10-13T17:50:20.310 回答
0

可能是这个查询?

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

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

于 2012-10-13T17:40:46.460 回答
0

为了RANK工作,您需要指定PARTITION BY要对其进行排名的列,然后,ORDER BY如果出现两个排名列具有相同值并且存在冲突的情况,则按列排序将排序通过订购那些有冲突的记录来发布..

于 2012-10-13T18:04:38.550 回答