这个sql如何写 (50分)

T

Tophi

Unregistered / Unconfirmed
GUEST, unregistred user!
比如这样一个数据表
姓名 分数 学科 文科/理科
111 10 英语 1
111 20 数学 0
111 10 语文 1
111 10 化学 0
112 10 物理 0
我想在想得出现在的输出效果
姓名 文科总分 理科总分

必须输出到一个数据中,不用存储过程,
同是,有可能某人没有文科学科,只有理科学科,这样文科总分是○分,也必须统计出来。

如何写?急用,oracle数据库,多谢


 
1)
create table cj(xm varchar2(10),fs number(3),xk varchar2(10),vl varchar2(1));
2)
insert into cj values('aaa',90,'语文','1');
insert into cj values('aaa',80,'数学','0');
insert into cj values('aaa',70,'政治','1');
insert into cj values('aaa',60,'化学','0');
insert into cj values('bbb',65,'语文','1');
insert into cj values('bbb',75,'政治','1');
insert into cj values('bbb',85,'化学','0');
insert into cj values('bbb',95,'数学','0');
3)
select a.xm1,a.fs1,b.fs2 from (select xm xm1,sum(fs) fs1 from cj where vl='1'
group by xm) a,(select xm xm2,sum(fs) fs2 from cj where vl='0' group by xm) b
where a.xm1=b.xm2;
在ORACLE下测试过放心用吧
 
不用创建表,直接把数据生成到新表mytable中
select a.xm1,a.fs1,b.fs2
into mytable
from (select xm xm1,sum(fs) fs1 from test where lb=1 group by xm) a,
(select xm xm2,sum(fs) fs2 from test where lb=0 group by xm) b
where a.xm1=b.xm2
 
同意jie5
 
to jie5谁创建表了,不事为了说清楚方法吗,要不我还要写它的表的名字吗,我做的这些
事说明我做了实验的,我的CJ表就是他的成绩表,他看了后就可以照搬改写了,也可以直接
拿来练习。你说的XM1 FS1,都事我的练习表里的字段,看清楚了再发言
 
大家说的我都看了,我自己这么作过
可是对于没有文科学科,只有理科学科的,就是没有记录,大家有没有发现。
我想这种情况仍然有记录,只不过文科总分是0分。
 
出现这种情况的原因是没有记录时空值参与了计算。
你在sum时按如下格式试试:
nvl(sum(nvl(fs,0)),0)
 
select distinct 姓名,
(select sum(分数) from mytable where 姓名=AAA.姓名 and 文理='1') as 文科分数,
(select sum(分数) from mytable where 姓名=AAA.姓名 and 文理='0') as 理科分数
from mytable AAA

这是我在ACCESS及MSSQL下的写法,ORACLE自己相应修改一下
 
顶部