SQL2000 我有一个成绩表,列如下
标示ID(id),用户名(uid),成绩(score),考试用时(exemtime),科目(exemid)
要取到每个人的最高成绩,成绩相同的就取时间最短的那个,时间分数都相同就按ID取,这个是每门每个人可以考两次
有部分数据如下  id      uid      score      exemtime      exemid  
   1      张三      100         1200         语文
   2      张三       90          800         数学
   3      张三      100         1100         语文
   4      李四       89         1300         语文
   5      李四       90         1100         语文
   6      李四       90         1300         数学
   7      王五       90         1300         数学
   8      王五       98         1300         数学
   9      王五       98         1300         语文
要得到的结果是  id      uid      score      exemtime      exemid  
   3      张三      100         1100         语文
   5      李四       90         1100         语文
   8      王五       98         1300         数学 求SQL语句,或建视图根据视图查,或程序的解决方法

解决方案 »

  1.   

    select * From tb1 Where id in(Select id From tb1 Group by uid Order by score DESC,exemtime,id) Order by id试试
      

  2.   

    如果是 2005 以上版本的用 PIVOT
    否则用 (case when ... then max(...) end)这是经典 sql 网上是在太多了 去搜索 行转列 或 数据透视
      

  3.   

    说个例子,楼主类推吧select * from 表格 order by score desc,time desc,id desc
    order by score desc 就是按SCROE排序,这个(desc)是倒序,还有一个就asc是顺序order by score desc,time desc,id desc
    按score倒,再到time,再到id 
      

  4.   

    select * From [table] Where id in
    (
    Select 
    (select top 1 id From [table] Where [uid]=tb2.[uid] Order by score DESC,exemtime,id) as id
    From [table] tb2 Group by [uid]
    ) Order by id这样应该可以了
      

  5.   

    case when 的执行效率应比五楼的高很多尤其数据量比较大的情况下