今天,需求量约为以下结果集紧凑:

         COL1       COL2       COL3

     ---------- ---------- ----------         

         1

         2

         3

         4

         5

         6

                    7

                    8

                    9

                   10

                              11

                              12


      COL1       COL2       COL3

    ---------- ---------- ----------

         1          7         11

         2          8         12

         3          9

         4         10

         5

         6

drop table test;

create table test(col1 number,col2 number,col3 number);

insert into test values(1,null,null);

insert into test values(2,null,null);

insert into test values(3,null,null);

insert into test values(4,null,null);

insert into test values(5,null,null);

insert into test values(6,null,null);

insert into test values(null,7,null);

insert into test values(null,8,null);

insert into test values(null,9,null);

insert into test values(null,10,null);

insert into test values(null,null,11);

insert into test values(null,null,12);

commit;


SQL> select * from test;

      COL1       COL2       COL3

---------- ---------- ----------

         1

         2

         3

         4

         5

         6

                    7

                    8

                    9

                   10

                              11

                              12

思路是每列查出来,然后做左连接:

with t1 as(select rownum rn,col1 from test where col1 is not null),

t2 as(select rownum rn,col2 from test where col2 is not null),

t3 as(select rownum rn,col3 from test where col3 is not null)

select col1,col2,col3 from t1,t2,t3 where t1.rn=t2.rn(+) and t2.rn=t3.rn(+) 

order by t1.rn;

      COL1       COL2       COL3

---------- ---------- ----------

         1          7         11

         2          8         12

         3          9

         4         10

         5

         6