第一题:我现在有如下表:
班级 语文 数学 英语
1班 80.6 86.0 82.5
2班 80.3 83.5 79.0
3班 84.5 91.0 87.5
行列转换成:
1班 2班 3班
语文 80.6 80.3 84.5
数学 86.0 83.5 91.0
英语 82.5 79.0 87.5
第二题:
原表: 班级 学号
1 1
1 2
1 3
2 1
2 2
3 1
转换后的: 班级 学号
1 1,2,3
2 1,2
3 1 万分感谢,
班级 语文 数学 英语
1班 80.6 86.0 82.5
2班 80.3 83.5 79.0
3班 84.5 91.0 87.5
行列转换成:
1班 2班 3班
语文 80.6 80.3 84.5
数学 86.0 83.5 91.0
英语 82.5 79.0 87.5
第二题:
原表: 班级 学号
1 1
1 2
1 3
2 1
2 2
3 1
转换后的: 班级 学号
1 1,2,3
2 1,2
3 1 万分感谢,
10g的方法WITH A AS
(SELECT 1 班级,1 学号 FROM DUAL UNION
SELECT 1 班级,2 学号 FROM DUAL UNION
SELECT 1 班级,3 学号 FROM DUAL UNION
SELECT 2 班级,1 学号 FROM DUAL UNION
SELECT 2 班级,2 学号 FROM DUAL UNION
SELECT 3 班级,1 学号 FROM DUAL
)
select 班级,WMSYS.WM_CONCAT(学号) TIME FROM A GROUP BY 班级
/************************
第二题:
Ò»ÕÅ±í£¨¿¼ÇÚÐÅÏ¢±í£©
×ֶΣºÓû§id,ÈÕÆÚ£¬Ê±¼ä
±íÖÐµÄ ¾ßÌåÄÚÈÝΪ
µÚ¶þÌâ:
Ô±í: °à¼¶ ѧºÅ
1 1
1 2
1 3
2 1
2 2
3 1
ת»»ºóµÄ: °à¼¶ ѧºÅ
1 1,2,3
2 1,2
3 1 declare
err varchar2(100);
begin
prc_sxm2(err);
dbms_output.put_line('error is'||err);
end;
select * from tt1
*************************/
cursor cur_getclass is
select distinct class from tt1;
cursor cur_getxuehao is
select class,xuehao from tt1;
v_sql varchar2(200);
v_err varchar2(200);
l integer;
i integer;
--v_sql:='';
cur_class cur_getclass%rowtype;
cur_xuehao cur_getxuehao%rowtype;
BEGIN
open cur_getclass;
open cur_getxuehao;
loop
fetch cur_getclass into cur_class;
exit when cur_getclass%notfound;
v_sql:=cur_class.class||' '||cur_xuehao.xuehao;--°Ñ°à¼¶Óë³É¼¨·ÅÔÚÒ»Æð
fetch cur_getxuehao into cur_xuehao;
--Ñ»·È¡µÃʱ¼ä
if (cur_xuehao.class=cur_class.class )
then
select count(*) into l from tt1 where tt1.class=cur_class.class ;
for i in 1..l
loop
v_sql:=v_sql||' '||cur_xuehao.xuehao;
fetch cur_getxuehao into cur_xuehao;
end loop;
end if;
DBMS_OUTPUT.put_line(v_sql);
end loop;
exception when others
then v_err :=sqlerrm;
err:=v_err;
--DBMS_OUTPUT.put_line(v_err);
END prc_sxm2;
你自己调试下,看行不行
先建立一个函数,作用是求和:
create or replace function f_GetCol_Sum(str_Val in varchar2) return varchar2 is
Result varchar2(32767);
cursor c_GetCol_Sum is
select 班级,学号from 表名 where 班级= str_Val;
begin
Result :='';
for cGetCol_Sum in c_GetCol_Sum loop
Result := Result||cGetCol_Sum.学号||',';
end loop;
return(Result);
end f_GetCol_Sum;查询:
select 班级,f_GetCol_Sum(班级) from 表名 group by 班级
建议可以按如下方式执行
1 80.6 86.0 90.0
2 80.3 87.0 91.0
3 84.5 88.0 92.0--sql:
select '语文' as 科目,
sum(decode(A01,1,A02,0)) as A班
,sum(decode(A01,2,A02,0)) as B班
,sum(decode(A01,3,A02,0)) as C班 from b
union
select '数学' ,
sum(decode(A01,1,A03,0)) as A班
,sum(decode(A01,2,A03,0)) as B班
,sum(decode(A01,3,A03,0)) as C班 from b
union
select '英语' ,
sum(decode(A01,1,A04,0)) as A班
,sum(decode(A01,2,A04,0)) as B班
,sum(decode(A01,3,A04,0)) as C班 from b--result:
1 数学 86 87 88
2 英语 90 91 92
3 语文 80.6 80.3 84.5