我有一张包含一些记录的表格,我想检查行的等级,如果等级大于100,我会设置权限。
我编写流动的代码来查找记录的排名,但是当我使用rank或row_number函数而没有额外的字段(如用户名或系列)时,虽然它可以与其中一个字段一起使用,但它不起作用。
SELECT * from
(Select username,
Rank() over(order by point desc) as 'ranking'
from student) t
where (username='test')
我想查找记录并设置一个具有此记录等级的变量。
答案 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列这样的情况具有相同的值并且存在冲突,然后按列排序将通过对这些冲突的记录进行排序来解决问题。