表csrank
现在有字段
Username, updatetime,kills,teamkills,deaths,hits,shots,headshots,bodyparts1,bodyparts2,bodyparts3,bodyparts4,bodyparts5,bodyparts6,bodyparts7
比如现在库中有100个用户,kills这个字段是杀敌数量,以这个最多的开始排列,倒序排列数据库中有一个叫test的人,他的kills=1000,其他人的任意的数值现在要查询test在这些人中是排在kills杀敌数量的第几位,就是想获取他的排行位置应该如何写呢?

解决方案 »

  1.   

    --2000SELECT *,
           rnk=(SELECT COUNT(*)
                FROM srank
                WHERE kills>=s.kills)
    FROM srank AS s;--2005SELECT *,
           rnk=DENSE_RANK() OVER(ORDER BY kills)
    FROM srank;
      

  2.   

    select rowid
    from
    (
       select rowid = row_number() over (order by kills desc) ,Username
       from csrank
    ) a
    where Username = 'Test'
      

  3.   

    select Username,id = (select count(1) from csrank where kills >= a.kills)
    from csrank a
      

  4.   

    select tid=identity(int,1,1),* into # from csrank order by kills desc
    select tid as '排行位置' from # where Username='test'
    drop #
      

  5.   


    --参考
    declare @t table(a varchar(18),b decimal(20,8)) 
    insert @t select 
    'ZZ:BW:6000', '2.00000000' union all select  
    'ZZ:BW:6000', '5.00000000' union all select 
    'ZZ:BW:6000', '45.00000000' union all select 
    'ZZ:BW:6000', '78.00000000' union all select 
    'ZZ:BW:6000', '87.00000000' union all select 
    'ZZ:BW:6001', '2.00000000' 
    select * ,(select count(*)+1 from @t t1 where t1.a=t2.a and t1.b <t2.b )as 排名 from @t t2 order by a,b 
    /*
    a                  b                      排名          
    ------------------ ---------------------- ----------- 
    ZZ:BW:6000         2.00000000             1
    ZZ:BW:6000         5.00000000             2
    ZZ:BW:6000         45.00000000            3
    ZZ:BW:6000         78.00000000            4
    ZZ:BW:6000         87.00000000            5
    ZZ:BW:6001         2.00000000             1*/