表1.Employee: 
EID   Name   Department Job Email Password 
10001 李明   SBB 
10003 李筠平 LUK
11045 李洁   SBB
10044 胡斐   MTD
10009 徐仲刚 SBB
10023 李燕   SBB
20460 陆明生 MTD
20078 张青   MMM
20001 李立   LUK表2.Training 
CourseID EID    Course  Grade TOrder 
1        10001  T-SQL   60 
3        11045  Oracle  71 
2        20460  Java    34 
1        10003  T-SQL   59 
3        10001  Oracle  90 
2        20001  Java    12 
2        20078  Java    78 
2        10003  Java    78 
3        30001  Oracle  71 
3        20048  Oracle  36 
 
列出所有各课成绩最高的员工信息,要求显示EID、Name、Department、Course、Grade(Oracle)
弄了半天,没弄出来..查了一些帖子也没有找到解决的办法.请大侠相助

解决方案 »

  1.   

    training表中的记录
    3        30001  Oracle  71 
    可以忽略
    employee表并没有此eid
      

  2.   

    用oracle的分析函数试试,应该可以实现partition by  order by 
      

  3.   

    我测试是成功的,你试试看~~~========================sql==========================select ee.eid,ee.name,ee.department,zz.course,zz.grade
      from  (select tt.*,rank() over(partition by tt.CourseID,tt.Course order by tt.Grade desc) as rk
               from Training tt
             )zz,
           Employee ee
     where zz.rk = 1
       and ee.eid = zz.eid;
    ======================result=========================
           EID NAME         DEPARTMENT COURSE      GRADE
    ---------- ------------ ---------- ------ ----------
         10001 李明         SBB        T-SQL          60
         20078 张青         MMM        Java           78
         10003 李筠平       LUK        Java           78
         10001 李明         SBB        Oracle         90