如果我理解您的查询好,那么可以这样做而无需改变你的数据库结构:
select MAIN.stu_number, MAIN.stu_name, MAIN.ex_name,
MATHS.stu_score as MATHEMATICS,
ENGLISH.stu_score as ENGLISH,
PHYSICS.stu_score as PHYSICS,
CHEMISTRY.stu_score as CHEMISTRY
from EXAMS_MASTER_REGISTER MAIN
left join EXAMS_MASTER_REGISTER MATHS on MAIN.stu_number = MATHS.stu_number AND MATHS.ex_subject = 'MATHEMATICS'
left join EXAMS_MASTER_REGISTER ENGLISH on MAIN.stu_number = ENGLISH.stu_number AND ENGLISH.ex_subject = 'ENGLISH'
left join EXAMS_MASTER_REGISTER PHYSICS on MAIN.stu_number = PHYSICS.stu_number AND PHYSICS.ex_subject = 'PHYSICS'
left join EXAMS_MASTER_REGISTER CHEMISTRY on MAIN.stu_number = CHEMISTRY.stu_number AND CHEMISTRY.ex_subject = 'CHEMISTRY'
where MAIN.stu_level = '1'
and MAIN.stu_stream = 'EAST'
and MAIN.ex_semester = 'FIRST'
and MAIN.ex_name = 'MIDYEARS'
and MAIN.academic_year = '2012'
order by (NVL(MATHS.stu_score,0) + NVL(ENGLISH.stu_score,0) + NVL(PHYSICS.stu_score,0) + NVL(CHEMISTRY.stu_score,0)) desc
注:我用的顺序改变了,在这种形式是不再可用,现在这个总结分数,然后排名。
但是,这个确切的DB结构是不好的。这不是在First Normal Form (1NF),这使事情不必要的困难,并容易出错。另外请考虑阅读2NF,3NF和BCNF(其他人也是,但AFAIK,这些是更广泛已知和使用的正常形式)。我假设你正在学习,这会让你走上正轨。
你应该把你的一个表分成(至少)两个:一个用于学生的个人数据(现在用于MAIN别名的列),另一个用于分数(其他列)。
你的意思是你想新列添加到结果,与得分为其他科目?我的意思是你想看一个结果集中所有主题的所有分数吗? – ppeterka
是在一个结果集中...该示例只有数学 – ErrorNotFoundException