现有表如下:
          a          b          c          d
          A          B          C          D
          1          2          3          4
          I          II         III        IV如何写SELECT语句实现矩阵转置,显示结果为变成:          a          A          1          I
          b          B          2          II
          c          C          3          III
          d          D          4          IV
?

解决方案 »

  1.   

    一句sql实现等高人出现吧,,
    我的笨方法:declare
    c1 varchar2(10);
    c2 varchar2(10);
    c3 varchar2(10);
    c4 varchar2(10);
    r1 varchar2(100);
    r2 varchar2(100);
    r3 varchar2(100);
    r4 varchar2(100);
    sqlstr varchar2(4000);
    cursor c_emp is select * from t13;
    begin
      r1:='select ';
      r2:='select ';
      r3:='select ';
      r4:='select ';
      open c_emp;
      LOOP
      FETCH c_emp INTO c1,c2,c3,c4;
      EXIT WHEN c_emp%NOTFOUND;
      r1:=r1||''''||c1||''''||' a,';
      r2:=r2||''''||c2||''''||' b,';
      r3:=r3||''''||c3||''''||' c,';
      r4:=r4||''''||c4||''''||' d,';
      
      end loop;
      close c_emp;
      r1:=substr(r1,1,length(r1)-1)||' from dual union all ';
      r2:=substr(r2,1,length(r2)-1)||' from dual union all ';
      r3:=substr(r3,1,length(r3)-1)||' from dual union all ';
      r4:=substr(r4,1,length(r4)-1)||' from dual '; 
      dbms_output.put_line(r1||r2||r3||r4);
      --select 'a' a,'A' a,'1' a,'I' a from dual union all select 'b' b,'B' b,'2' b,'II' b from dual union all select 'c' c,'C' c,'3' c,'III' c from dual union all select 'd' d,'D' d,'4' d,'IV' d from dual 
      --sqlstr:=r1||r2||r3||r4;
      --执行sqlstr返回结果集
    end;
      

  2.   

    是就4行4列还是动态啊。要是固定的,怎么都好说,union都可以.
    动态就不好说了。
      

  3.   

    ORACLE里有专有函数来处理这个的,具体乍整的到网上搜搜看。
      

  4.   

    不过如jdsnhan(柳荫凉)所说 要求是固定的列 动态的话基本不能处理了
      

  5.   

    建议你看看这篇文章:http://blog.csdn.net/lee576/archive/2006/12/11/1438973.aspx
      

  6.   

    了解一下ORACLE中的行列转换的方法,便可得知答案.