sql语句实现不了
参考:
SQL  >  select  job,ename  from  emp;  
 
JOB              ENAME  
---------  ----------  
CLERK          SMITH  
SALESMAN    ALLEN  
SALESMAN    WARD  
MANAGER      JONES  
SALESMAN    MARTIN  
MANAGER      BLAKE  
MANAGER      CLARK  
ANALYST      SCOTT  
PRESIDENT  KING  
SALESMAN    TURNER  
CLERK          ADAMS  
 
JOB              ENAME  
---------  ----------  
CLERK          JAMES  
ANALYST      FORD  
CLERK          MILLER  
 
已选择14行。  
 
SQL  >  create  or  replace  function  f_ename(jobno  in  varchar2)  
   2    return  varchar2  is  
   3      
   4    str_return  varchar2(200);  
   5    cursor  c_ename(v_jobno  varchar2)  is  select  ename  from  emp  where  job=v_jobno;  
   6    begin  
   7    for  str_temp  in  c_ename(jobno)  loop  
   8    str_return:=str_return  |  |str_temp.ename;  
   9    end  loop;  
 10    return  str_return;  
 11    end;  
 12    /  
 
函数已创建。  
 
SQL  >  select  f_ename(job)  from  (  
   2    select  distinct  job  from  emp);  
 
F_ENAME(JOB)  
---------------------------------------  
 SCOTT  FORD  
 SMITH  ADAMS  JAMES  MILLER  
 JONES  BLAKE  CLARK  
 KING  
 ALLEN  WARD  MARTIN  TURNER  
 
SQL  >  
加上job列:  
SQL  >  select  job,f_ename(job)  from  (  
   2    select  distinct  job  from  emp);  
 
JOB            F_ENAME(JOB)  
-------------------------------------------------------  
ANALYST  SCOTT  FORD  
CLERK  SMITH  ADAMS  JAMES  MILLER  
MANAGER  JONES  BLAKE  CLARK  
PRESIDENT  KING  
SALESMAN  ALLEN  WARD  MARTIN  TURNER  

解决方案 »

  1.   

    --先建一个函数:
    create or replace function fun_test(p_in in varchar2) return varchar2 as
        cursor c is select stat_name from table where accept_id=p_in;
        v_temp varchar2(100);
        p_out varchar2(300);
    begin 
        open c;
        loop 
            fetch c into v_temp;
            exit when c%notfound;
            p_out:=p_out||v_temp;
        end loop;
        close c;
        return p_out;
        exception 
            when others then 
               p_out:="出错";
               return p_out;
    end;然后调用
    select accept_id,fun_test(accept) from (select distinct accept_id from tablename)--以上未经测试.你自己测试修改一下.
      

  2.   

    未测试
    创建函数
    create or replace function f_test(v_id in varchar2)return varchar2 is
    type v_cursor is ref cursor;
      mycur v_cursor;
      v_code varchar2(1000);
      v_temp varchar2(100);
    begin
      v_code := '';
      v_temp := '';
      open mycur for select stat_name from tablename where accept_id=v_id;
      loop
        fetch mycur into v_temp;
        exit when mucur%notfound;
          v_code := v_code||v_temp;
      end loop;
      close mycur;
      
      return v_code;  
    end f_test;调用函数:
    select distinct accept_id ,
           f_test(accept_id) ,
           stat_name
      from tablename;
      

  3.   

    又是一将竖表转换成横表的case.