CREATE TABLE TABLE2 AS
SELECT TAB1_A A,TAB1_B||TAB2_B||TAB3_B B FROM 
( SELECT TAB1.ID TAB1_ID,TAB1.A TAB1_A,TAB1.B TAB1_B,
   TAB2.ID TAB2_ID,TAB2.A TAB2_A,TAB2.B TAB2_B,
   TAB3.ID TAB3_ID,TAB3.A TAB3_A,TAB3.B TAB3_B
FROM
(SELECT ROWNUM ID,A,B FROM TABLE1 ) TAB1,
(SELECT ROWNUM ID,A,B FROM TABLE1 ) TAB2,
(SELECT ROWNUM ID,A,B FROM TABLE1 ) TAB3
)
WHERE TAB1_B < TAB2_B AND TAB2_B <TAB3_B
      AND TAB1_A = TAB2_A AND TAB1_A = TAB3_A
  

解决方案 »

  1.   

    STR1 VHARCHAR2(?);
    STR2 VHARCHAR2(?);
    Value1 VHARCHAR2(?);
    .........
    STR1 :=' ';
    STR2 :=' ';
    DECLARE CURSOR curTemp IS SELECT DISTINCT m FROM table1;
      BEGIN
        OPEN curTemp;
        LOOP
        FETCH curTemp INTO Value1;
        EXIT WHEN curTemp%NOTFOUND;
        SELECT N INTO STR1 FROM table1 WHERE M= Value1;
        STR2:=STR1 +STR2; 
        END LOOP;
        CLOSE curTemp;
     END;
     INSERT INTO table2 values(m, str2);
      

  2.   

    哦,其实rownum可以不用,去掉都行,只是开始我写上了,以为后面能用上
    其实没用,也忘了删了,这是去掉rownum后的sqlSELECT TAB1_A A,TAB1_B||TAB2_B||TAB3_B B FROM 
    ( SELECT TAB1.A TAB1_A,TAB1.B TAB1_B,
       TAB2.A TAB2_A,TAB2.B TAB2_B,
       TAB3.A TAB3_A,TAB3.B TAB3_B
    FROM
    (SELECT A,B FROM TABLE1 ) TAB1,
    (SELECT A,B FROM TABLE1 ) TAB2,
    (SELECT A,B FROM TABLE1 ) TAB3
    )
    WHERE TAB1_B < TAB2_B AND TAB2_B <TAB3_B
          AND TAB1_A = TAB2_A AND TAB1_A = TAB3_A
      

  3.   

    创建一个函数  f(m) 返回连串的n
    然后
     select distinct m , f(m) from table1 ;
    ok
      

  4.   

    create or replace function f(v_m varchar2) return varchar2 is
      cursor c1 is select n from table1 where m = v_m;
      v_n varchar2(100);
    begin
      for i in c1 loop 
        v_n := v_n || i.n;
      end loop;
      return v_n ;
    end;
    /
      

  5.   

    白大哥的算法的确很精妙,我需要的就是这种算法,所以在这里再次感谢,以后有问题我会继续请教!小弟分少,20分都加给白大哥,白大哥不要嫌弃。
        整理如下,各位朋友可以测试:
    DROP   TABLE table1;
    CREATE TABLE table1(m VARCHAR2(10),n VARCHAR2(10));
    INSERT INTO  table1 VALUES('a','x');
    INSERT INTO  table1 VALUES('a','y');
    INSERT INTO  table1 VALUES('a','z');
    INSERT INTO  table1 VALUES('b','u');
    INSERT INTO  table1 VALUES('b','v');
    INSERT INTO  table1 VALUES('b','w');
    create or replace function f(v_m varchar2) return varchar2 is
      cursor c1 is select n from table1 where m = v_m;
      v_n varchar2(100);
    begin
      for i in c1 loop 
        v_n := v_n || i.n;
      end loop;
      return v_n ;
    end;
    /
    select distinct m , f(m) from table1;