如何通过sql实现行转列???
create table t2(col1 varchar2(10),col2 varchar2(10));
insert into t2 values('001','vl1');
insert into t2 values('001','vl2');
insert into t2 values('001','vl3');
insert into t2 values('002','vl1');
insert into t2 values('002','vl2');实现如下表结构:col1   col2     col3    col4
----  -----     -----  ------
001    vl1      vl2    vl3
002    vl1      vl2
001有N行,相应的也可以转成N列,请高手指点。

解决方案 »

  1.   

    如果是固定列数,可以用DECODE实现,如果是不固定列,用存储过程,搜索下吧,这个问题被提了太多次了,基本上隔几天就会出现一次
      

  2.   

    从网上找的,但是不符合我的需求。请高手指点:
    以下是网上转载的方法一:
    create table t2(col1 varchar2(10),col2 varchar2(10));
    insert into t2 values('001','vl1');
    insert into t2 values('001','vl2');
    insert into t2 values('001','vl3');
    insert into t2 values('002','vl1');
    insert into t2 values('002','vl2');SELECT COL1, LTRIM(MAX(SYS_CONNECT_BY_PATH(COL2, ' ')), ',') COL2
    FROM (SELECT COL1,
                   COL2,
                   MIN(COL2) OVER(PARTITION BY COL1) COL2_MIN,
                   (ROW_NUMBER() OVER(ORDER BY COL1, COL2)) +
                   (DENSE_RANK() OVER(ORDER BY COL1)) NUMID
              FROM T2)
    START WITH COL2 = COL2_MIN
    CONNECT BY NUMID - 1 = PRIOR NUMID
    GROUP BY COL1;COL1       COL2
    ---------- ----------------------------------------
    001        vl1,vl2,vl3
    002        vl1,vl2
      

  3.   

    select col1,col2,col3,col4... from (
    select col1,col2,
                     lead(col2,1) over (order by col1,col2) col3 ,
                       lead(col1,1) over (order by col1,col2) col3_1 ,
                      lead(col2,2) over (order by col1,col2) col4,
                      lead(col1,2,col1) over (order by col1,col2) col4_1
                      ...... 
                     from t2 
                       ) t where   col1=col3_1 and col1=col4_1 ...  ;
    根据你N的情况,再添加几列就可以,如果N是不确定的,只能动态去拼sql,,没有万能的!
      

  4.   

    SQL语句语句中调用存储过程。方式比较好。