第一题:我现在有如下表:   
  班级           语文           数学           英语     
  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.   

    发0分贴还想有人回?只回答一个,第2题
    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 班级
      

  2.   

    create or replace procedure prc_sxm2(err out varchar2)  is
    /************************
    第二题:
    Ò»ÕÅ±í£¨¿¼ÇÚÐÅÏ¢±í£© 
    ×ֶΣºÓû§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;
    你自己调试下,看行不行
      

  3.   

    第二问:
    先建立一个函数,作用是求和:
    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 班级
      

  4.   

    第一题:如果科目不是很多
    建议可以按如下方式执行
    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