第1个回答 2012-06-29
传入的两个参数分别为班级替换下面where条件中的班级传值,科目在执行sql前判断,如果传入科目a,那么执行下面这段sql,如果传入科目b,那么执行sql中将grade_a替换为grade_b即可:
SELECT CASE WHEN GRADE_A >=90 THEN COUNT(1) ELSE 0 END 科目a90以上人数,
CASE WHEN GRADE_A >=80 AND grade_a >90 THEN COUNT(1) ELSE 0 END 科目a8090分人数, CASE WHEN GRADE_A >=70 AND grade_a >80 THEN COUNT(1) ELSE 0 END 科目a7080分人数, CASE WHEN GRADE_A >=60 AND grade_a >70 THEN COUNT(1) ELSE 0 END 科目a6070分人数, CASE WHEN GRADE_A <60 THEN COUNT(1) ELSE 0 END 科目a60以下人数 from b WHERE CLASS = 'BANJI1' GROUP BY grade_a;本回答被提问者和网友采纳
第2个回答 2012-06-29
create table stu_score(id varchar2(10) primary key,stu_no varchar2(10),stu_name varchar2(20),stu_grade varchar2(10),score_a number(3),score_b number(3),score_c number(3));
create or replace procedure stu_score_pro(stu_grade in varchar2,score_a in number,ret out varchar2)as v_ret_80 varchar2(100); v_ret_90 varchar2(100); v_ret varchar2(100); begin select sum(nvl(decode(score_a,1,score_a,2,score_b,score_c),0)) into v_ret_90 from stu_score where stu_grade=stu_grade and decode(score_a,1,score_a,2,score_b,score_c)>=90; select sum(nvl(decode(score_a,1,score_a,2,score_b,score_c),0)) into v_ret_80 from stu_score where stu_grade=stu_grade and decode(score_a,1,score_a,2,score_b,score_c)>=80 and decode(score_a,1,score_a,2,score_b,score_c)<90; --其他分数段 ret := '90:'||v_ret_90||' 80-90'||v_ret_80; exception when others then ret := 'error';end;
具体的表和字段看你的情况