0

行のランクを確認したいいくつかのレコードを含むテーブルがあり、ランクが100より大きい場合は、アクセス許可を設定します。
レコードのランクを見つけるためにフローコードを作成しましたが、追加のフィールド(usernameやfamilyなど)なしでrankまたはrow_number関数を使用すると、追加のフィールドの1つでは機能しますが、機能しません。

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

機能するには、ランク付けする列RANKを指定する必要があります。次に、ランク列の両方が同じ値を持ち、競合があるような状況が発生した場合、列ごとに並べ替えると、それらの競合するレコードを順序付けることによって発行..PARTITION BYORDER BY

于 2012-10-13T18:04:38.550 に答える
0

このクエリでしょうか?

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

選択したユーザーよりもポイントが少ないユーザーの数を返す必要があります

于 2012-10-13T17:40:46.460 に答える