表a中
学生id 学生姓名 科目 成绩
1 甲 语文 90
2 乙 数学 80
3 甲 数学 79
4 乙 语文 70科目固定
学生姓名不固定如何查询出以下形式,包含合计
学生姓名 语文 数学
甲 90 79
乙 70 80
合计 160 159
sql如何写?谢谢!
学生id 学生姓名 科目 成绩
1 甲 语文 90
2 乙 数学 80
3 甲 数学 79
4 乙 语文 70科目固定
学生姓名不固定如何查询出以下形式,包含合计
学生姓名 语文 数学
甲 90 79
乙 70 80
合计 160 159
sql如何写?谢谢!
is
type ResultData is ref cursor;
procedure getRstData( rst out ResultData,str out varchar);
end sp_test;
create or replace package body sp_test
is
procedure getRstData( rst out ResultData,str out varchar)
is
cursor cur is select distinct 科目 from a;
begin
str:='select a.学生姓名'; for t_cur in cur loop
str := str||',sum(decode(b.科目,'''||t_cur.科目||''',成绩,0)) "'||t_cur.科目||'"';
end loop;
str:=str||' from a group by a.学生姓名'; open rst for str;
end getRstData;
end sp_test;
(select 学生姓名,
sum(case 科目 when '语文' then 成绩 end) 语文,
sum(case 科目 when '数学' then 成绩 end) 数学,
from a group by 学生姓名
union
select '',
sum(case 科目 when '语文' then 成绩 end) 语文,
sum(case 科目 when '数学' then 成绩 end) 数学,
from a)
order by 学生姓名;
create table t_result (id varchar2(2),username varchar2(10),subject varchar2(10),score number(5));-- 初始化表数据
insert into t_result (id,username,subject,score)values('1','甲','语文','90');
insert into t_result (id,username,subject,score)values('2','乙','数学','80');
insert into t_result (id,username,subject,score)values('3','甲','数学','79');
insert into t_result (id,username,subject,score)values('4','乙','语文','70');
commit;-- 统计各学科总分SELECT nvl(t.username,'合计') 学生姓名,
sum(decode(t.subject,'语文',t.score,0)) 语文,
sum(decode(t.subject,'数学',t.score,0)) 数学
FROM t_result t
GROUP BY ROLLUP(t.username);-- 查询结果如下:
SQL> SELECT nvl(t.username,'合计') 学生姓名,
2 sum(decode(t.subject,'语文',t.score,0)) 语文,
3 sum(decode(t.subject,'数学',t.score,0)) 数学
4 FROM t_result t
5 GROUP BY ROLLUP(t.username);学生姓名 语文 数学
---------- ---------- ----------
甲 90 79
乙 70 80
合计 160 159