select subject_name "专业名称",
sum(decode(grade,2002,1,0)) "2002级学生总人数",
sum(decode(grade,2003,1,0)) "2003级学生总人数",
sum(decode(grade,2004,1,0)) "2004级学生总人数",
sum(decode(grade,2005,1,0)) "2005级学生总人数"
from 专业表 a,学生表 b
where a.subject_id = b.subject_id
group by a.subject_name
sum(decode(grade,2002,1,0)) "2002级学生总人数",
sum(decode(grade,2003,1,0)) "2003级学生总人数",
sum(decode(grade,2004,1,0)) "2004级学生总人数",
sum(decode(grade,2005,1,0)) "2005级学生总人数"
from 专业表 a,学生表 b
where a.subject_id = b.subject_id
group by a.subject_name
T3.scount3 as 2004级学生总人数,T4.scount4 as 2005级学生总人数
from 专业表
left join (select 专业,count(1) as scount1 from 学生表 where 年级=2002 group by 专业) T1
on 专业表.专业 = T1.专业
left join (select 专业,count(1) as scount2 from 学生表 where 年级=2003 group by 专业) T2
on 专业表.专业 = T2.专业
left join (select 专业,count(1) as scount3 from 学生表 where 年级=2004 group by 专业) T3
on 专业表.专业 = T3.专业
left join (select 专业,count(1) as scount4 from 学生表 where 年级=2005 group by 专业) T4
on 专业表.专业 = T4.专业
----------------------怎么可能呢,你把你写的SQL贴出来看看,肯定什么地方有遗漏的
现在还有一个问题,这样的查询结果只能显示四个年级中招生的专业。
对于学校有的专业,而所有年级都未招生的专业该怎么现在在我的查询结果里?
年级不固定的话,列数都是不确定的
如果是动态的sql怎么写?正要问这个问题呢,呵呵。duanzilin(寻)
因为在专业表和学生表中做了连接,也就是说如果学生表中没有的专业而专业表中有的专业,是不会这这个查询的结果显示出来的。所以说如果所有年级都未招生的专业就不会出现在这个查询的查询结果中。
-------------------------
你可以试试用外连接啊,这样学生表里没有的专业也会统计出来,不过各年级人数都是0,还有你要统计的是在校的学生吧,不可能把已经毕业的也统计进去吧,那样也不会有很多不确定的年级吧select subject_name "专业名称",
sum(decode(grade,2002,1,0)) "2002级学生总人数",
sum(decode(grade,2003,1,0)) "2003级学生总人数",
sum(decode(grade,2004,1,0)) "2004级学生总人数",
sum(decode(grade,2005,1,0)) "2005级学生总人数"
from 专业表 a,学生表 b
where a.subject_id (+) = b.subject_id
group by a.subject_name
例如:
sum(decode(grade,2002,decode(sex,'男',1,0),0)) "2002级学生男生人数",
sum(decode(grade,2002,decode(sex,'女',1,0),0)) "2002级学生女生人数",
或者用case when
case when grade = 2002 and sex = '男' then 1 else 0 end "2002级学生男生人数",
case when grade = 2002 and sex = '女' then 1 else 0 end "2002级学生女生人数",
最后一个问题
如果现在要统计各专业的班级数呢?而且数据来源于学生基本信息里,decode能实现么?