select 学号,总分,
1+isnull((select count(*) from 成绩表 where 总分<a.总分),0) as 排名
from 成绩表 a
order by 总分 desc

解决方案 »

  1.   

    Select  Identity(int,1,1) as 排名号,学号,总分 Into #tmp from 成绩表 
      Order by 总分 descSelect * from #tmpSelect * from #tmp where 排名号=第几行
      

  2.   

    select 学号, 总分 , (select count(总分)+1 from 你的表 where 总分 > a.总分) from 你的表 a
      

  3.   

    select 学号, 总分 , (select count(总分)+1 from 你的表 where 总分 < a.总分) 排名 from 你的表 a
      

  4.   

    select identity(int,1,1) as 名次,学号,总分 Into #temp from 成绩表 order by 总分 desc
    select * from #temp
    drop table #temp
      

  5.   

    请问为什么楼上的在temp前加了一个#啊,
    有什么用啊,
    如果我建立了一个临时表怎么在用完后删掉呢???
      

  6.   

    #为建临时表使用的,如果用#建表不用删除的,当你的到服务器的连接断开后系统就自己删除了,还有一种使用TEMPDB..TABLENAME建的是要SQL SERVER重启系统会自动删除的
      

  7.   

    直接用下面的语句就行了.select 学号,(select count(distinct *) from 成绩表 where 总分>=a.总分) as 排名
    from 成绩表 a
      

  8.   

    那就是这样啦
    select 学号,考次,(select count(distinct 总分) from 成绩表 where 总分>=a.总分 and 考次=a.考次) as 排名
    from 成绩表 a
      

  9.   

    当然不是.你有没有做过测试?
    --创建数据测试环境
    declare @tb table(学号 varchar(2),总分 int,考次 int)
    insert into @tb
    select '01',100,1
    union all select '02',65, 1
    union all select '03',86, 2
    union all select '03',78, 2--查询得到结果
    select 学号,考次,(select count(distinct 总分) from @tb where 总分>=a.总分 and 考次=a.考次) as 排名
    from @tb a
      

  10.   

    select a.a 学号,a.b 成绩,排名=count(*)
     from 
        a a
      join
        a  b
      on
        a.b>b.b
       group by a.a,a.b 
       order by a.b
      

  11.   

    select 学号,总分,1+isnull((select count(*) from 成绩表 where 总分<a.总分),0) as 排名
    from 成绩表 a
    order by 总分 desc
    也可以用join on来查询,如楼上upup兄弟!