最笨的办法。。没想到好方法可以实现搂主要求
select max(decode(a,1,a)) l,max(decode(a,2,a)) m,max(decode(a,3,a)) n from table
union all 
select max(decode(b,1,b)) l,max(decode(b,2,b)) m,max(decode(b,3,b)) n from table
union all 
select max(decode(c,1,c)) l,max(decode(c,2,c)) m,max(decode(c,3,c)) n from table
union all 
select max(decode(d,1,d)) l,max(decode(d,2,d)) m,max(decode(d,3,d)) n from table

解决方案 »

  1.   

    如果在已知行、列数量的情况下,可以使用游标的方式解决但是如果在未知行、列数的情况下,就有趣了哪位给个正确答案或者ORACLE中支持动态分配内存吗?即象C那样使用链表
      

  2.   

    已知行、列数量的如下,谁能提供未知行、列数量的转换方式?SQL> select * from tb_l2c;A     B     C     D
    ----- ----- ----- -----
    1     1     1     1
    2     2     2     2
    3     3     3     3SQL> DECLARE
      2   CURSOR cur_l2c_a IS /*声明游标*/
      3    SELECT a FROM tb_l2c;
      4   CURSOR cur_l2c_b IS /*声明游标*/
      5    SELECT b FROM tb_l2c;
      6   CURSOR cur_l2c_c IS /*声明游标*/
      7    SELECT c FROM tb_l2c;
      8   CURSOR cur_l2c_d IS /*声明游标*/
      9    SELECT d FROM tb_l2c;
     10     
     11   value VARCHAR2(5);
     12  BEGIN
     13   DBMS_OUTPUT.PUT('A' || ' B' || ' C');
     14   DBMS_OUTPUT.PUT_LINE('');
     15   DBMS_OUTPUT.PUT('-' || ' -' || ' -');
     16   DBMS_OUTPUT.PUT_LINE('');
     17  
     18   OPEN cur_l2c_a; /*打开游标*/
     19   OPEN cur_l2c_b; /*打开游标*/
     20   OPEN cur_l2c_c; /*打开游标*/
     21   OPEN cur_l2c_d; /*打开游标*/
     22   
     23   FETCH cur_l2c_a INTO value; /*从游标中检索数据行*/
     24   WHILE cur_l2c_a%FOUND LOOP
     25    DBMS_OUTPUT.PUT(value || ' ');
     26    FETCH cur_l2c_a INTO value;
     27   END LOOP;
     28   DBMS_OUTPUT.PUT_LINE('');
     29   FETCH cur_l2c_b INTO value; /*从游标中检索数据行*/
     30   WHILE cur_l2c_b%FOUND LOOP
     31    DBMS_OUTPUT.PUT(value || ' ');
     32    FETCH cur_l2c_b INTO value;
     33   END LOOP;
     34   DBMS_OUTPUT.PUT_LINE('');
     35   FETCH cur_l2c_c INTO value; /*从游标中检索数据行*/
     36   WHILE cur_l2c_c%FOUND LOOP
     37    DBMS_OUTPUT.PUT(value || ' ');
     38    FETCH cur_l2c_c INTO value;
     39   END LOOP;
     40   DBMS_OUTPUT.PUT_LINE('');
     41   FETCH cur_l2c_d INTO value; /*从游标中检索数据行*/
     42   WHILE cur_l2c_d%FOUND LOOP
     43    DBMS_OUTPUT.PUT(value || ' ');
     44    FETCH cur_l2c_d INTO value;
     45   END LOOP;
     46   
     47   CLOSE cur_l2c_a; /*关闭游标*/
     48   CLOSE cur_l2c_b; /*关闭游标*/
     49   CLOSE cur_l2c_c; /*关闭游标*/
     50   CLOSE cur_l2c_d; /*关闭游标*/
     51   DBMS_OUTPUT.PUT_LINE('');
     52  END;
     53  /
    A B C
    - - -
    1 2 3
    1 2 3
    1 2 3
    1 2 3PL/SQL 过程已成功完成。SQL>