有这样一组数据表:
学号    姓名    数学  名次1  语文 名次2
1101    张三    99            87
1102    李四    97            85       
1103    王五    86            90
查询之后如何实现
学号    姓名    数学  名次    语文  名次2
1101    张三     99    1      87    2
1102    李四     97    2      85    3
1103    王五     86    3      90    1
就是查询之后将学生以学号的顺序排序,但是学生的各科目的我名次动添加名次,既名次一开始是空的,排序之后自动添加名次,并且有相同的名次时候下一个自动添加,如何实现,在此感谢!是用临时表吗!
也就是如何将名次添加进去,在VB和ACCESS环境下! 

解决方案 »

  1.   

    --如果是sql server 2000
    select a.学号,
           a.姓名,
           a.数学,
           (select count(1) from tb where 数学 > a.数学) + 1 名次1,
           a.语文,
           (select count(1) from tb where 语文 > a.语文) + 1 名次2
    from tb a--如果是sql server 2005 / oracle
    select a.学号,
           a.姓名,
           a.数学,
           row_number() over(order by 数学 desc) 名次1,
           a.语文,
           row_number() over(order by 语文 desc) 名次2
    from tb a
      

  2.   

    SQL = "select a.学号,a.姓名,a.数学,(select count(1) from c1lsb1 where 数学>a.数学)+1 名次1 from c1lsb1  a"
    出现"语法错误,操作符丢失"的提示,是不是我的数据环境有问题,vb+access
      

  3.   

    我建议你 直接 用 excel 简单方便。。你的要求 全能满足实在不行 来个 vb外壳  + excel
      

  4.   

    可以间接实现。
    先用Dbgrid显示数据表中数据,然后进行排名。
      

  5.   

    select * from tabel order by 数学 desc,把数学按从大道小排序后,直接写语句写入排名数字即可。
    dim rs as recordset
    dim n as long
    set rs=data1.recordset
    rs.movefirst
    n=1
    Do while not rs.eof
       rs!名次1=n
       n=n+1 
       rs.movenext
    loop
    刷新一下data1.
    最后再用select * from tabel order by 学号,显示为原先的排序。
    同理,对语文排序也如此。