create table zyl_khxx(
sno varchar2(30) primary key,--学号
sname varchar2(50),--学生姓名
sex varchar2(32),--性别
xueyuan varchar2(32),--学院
zhuanye varchar2(32),--专业
banji varchar2(32),--班级
txmc varchar2(32),--体系名称
zcj varchar2(32),--总成绩
bpm number,--班级排名
zypm number,--专业排名
ypm number--院排名
);
 
问题:按照总成绩分别算出不同体系下的班级排名、专业排名、院排名。
      (就是算完后班级排名、专业排名、院排名三列上有正确排名)
谢谢!

解决方案 »

  1.   


    select sno,
           sname,
           sex,
           xueyuan,
           zhuanye,
           banji,
           txmc,
           zcj,
           rank() over(partition by banji order by zcj desc) bpm,  --班排名
           rank() over(partition by zhuanye order by zcj desc) zypm, --专业排名
           rank() over(partition by xueyuan order by zcj desc) ypm   --学院排名
    from zyl_khxx
      

  2.   


    --将自己的数据更新自己,搞不好原数据都会丢失
    create table n_zyl_khxx
    as
    select * from zyl_khxx
    where 1=0;
    --
    inser into n_zyl_khxx
    select sno,
           sname,
           sex,
           xueyuan,
           zhuanye,
           banji,
           txmc,
           zcj,
           rank() over(partition by banji order by zcj desc) bpm,
           rank() over(partition by zhuanye order by zcj desc) zypm, 
           rank() over(partition by xueyuan order by zcj desc) ypm 
    from zyl_khxx;
      

  3.   

    不想重建表的,用merge into也可以!
      

  4.   

    这个函数也在SQL Server里面实用