方式一,学科有限并为已知情况下,可以使用一条sql语句实现。
表如下:
ID NO Name Course Score
1 001 赵 语文 80
2 001 赵 数学 40
3 001 赵 英语 60
4 002 李 语文 50
5 002 李 数学 30
6 003 唐 语文 20
Sql语句执行结果如下:
NO Name AllCouse 总分
001 赵 语文,数学,英语 180
002 李 语文,数学 80
003 唐 语文 20
ID NO Name Course Score
1 001 赵 语文 80
2 001 赵 数学 40
3 001 赵 英语 60
4 002 李 语文 50
5 002 李 数学 30
6 003 唐 语文 20
Sql语句执行结果如下:
NO Name AllCouse 总分
001 赵 语文,数学,英语 180
002 李 语文,数学 80
003 唐 语文 20
--
建立测试环境
create table Score(
id integer,
no varchar(3),
name varchar2(10),
course varchar2(10),
score numeric(5,2)
);
--
建立累加序列
create sequence seq_Score start with 1;
--
插入测试数据
insert into Score values(seq_Score.Nextval ,'001','zhang','
数学',20 );
insert into Score values(seq_Score.Nextval,'001','zhang','
语文',20 );
insert into Score values(seq_Score.Nextval,'001','zhang','
英语',20);
insert into Score values(seq_Score.Nextval,'002','zhao','
语文',20 );
insert into Score values(seq_Score.Nextval,'002','zhao','
英语',20 );
insert into Score values(seq_Score.Nextval,'003','li','
数学',20 );
insert into Score values(seq_Score.Nextval,'003','li','
英语',20 );
--
查看当前数据表内容
select * from score;
select no,name, decode(
语文,0,'','语文')||decode(数学,0,'','数学')||decode(英语,0,'','英语') 课程, 语文+数学+英语 总分
from
(select no,name,nvl(sum(decode(course,'
语文',score,0)),0) 语文,
nvl(sum(decode(course,'
数学',score,0)),0) 数学,
nvl(sum(decode(course,'
英语',score,0)),0) 英语
from score
group by no,name) t