在Oracle中进行多表连接,对不同表的两列(包含加法)求和。

3
我有三个表格。
SCHOOL:学校代码(PK),年份,学校名称。
ENROLMENT:学校代码,年份,种姓,c1,c2,c3,c4,c5,c6,c7,c8
CLASS:学校代码,年份,班级编号,教室数量
现在,我想要找到在1至4年级有报名的学校列表,以及这些班级所使用的教室数量(CLASSID的定义:7表示1、2年级,8表示3、4年级,9表示5、6年级,10表示7、8年级;种姓的定义为:1表示普通,2表示sc,3表示st,4表示其他)。
我使用了以下查询语句:
select m.schoolcode, m.schoolname, sum(e.c1+e.c2+e.c3+e.c4), sum(c.rooms) 
from dise2k_enrolment09 e, 
     dise2k_master m ,
     dise2k_clsbycondition c 
where m.schoolcode=e.schoolcode and
      m.schoolcode=c.schoolcode and 
      e.year='2011-12' and 
      m.year='2011-12' and 
      c.year='2011-12' and 
      c.classid in(7,8) and 
      e.caste in(1,2,3,4) 
group by m.schoolcode, m.schoolname 

但是显示的结果不正确。报名人数比实际要高得多,教室也是如此。

可能是重复的 http://stackoverflow.com/questions/11828046/multiple-table-joining-querry-in-oracle-sql-plus-11g 甚至39分钟前再次提问并被作者删除 http://stackoverflow.com/questions/11843311/sum-of-two-different-columns-of-different-tables-and-multiple-table-joining-in-o - Yaroslav
1
你的列真的叫做c1、c2等吗?这听起来像是一个非规范化的设计。 - user330315
1个回答

6

好的,尝试一下这个方法,看看你的问题是否来自于联接中重复记录:

select m.schoolcode, m.schoolname, e_sum, c_sum 
  from dise2k_master m
 inner join
 (
    select schoolcode,
           sum(c1 + c2 + c3 + c4) e_sum
      from dise2k_enrolment09
     where year='2011-12'
       and caste in(1,2,3,4) 
     group by schoolcode
 ) e
    on m.schoolcode=e.schoolcode
 inner join
 (
    select schoolcode,
           sum(rooms) c_sum
      from dise2k_clsbycondition
     where year='2011-12'
       and classid in(7,8)
     group by schoolcode
 ) c
    on m.schoolcode=c.schoolcode
 where m.year='2011-12'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接