能否自己写一个类似sum的函数用法也一样,这个函数是sumstr()里面传的字段类型为varchar2,功能是把分组中的字符串用逗号连成串eg.
select a,b from t 
a  b
-  -
1  a1
1  a1
2  b2
2  b3select a,sumstr(b) b from t
a  b
-  -
1  a1,a2
2  b2,b3

解决方案 »

  1.   

    不好意思,select a,sumstr(b) b from t后加个 group by a
    大家帮忙了!!!
      

  2.   

    9i里不是有sys_connect_by_path吗?
      

  3.   

    9i里用sys_connect_by_path这个函数可以满足你的要求。
    8i里没有sys_connect_by_path,你说的sumstr函数不知道怎么做,学习。
      

  4.   

    不定列行列转换

    c1 c2
    --------------
    1 我
    1 是
    1 谁
    2 知
    2 道
    3 不
    ……
    转换为
    1 我是谁
    2 知道
    3 不
    这一类型的转换必须借助于PL/SQL来完成,这里给一个例子
    CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER) 
    RETURN VARCHAR2 
    IS 
    Col_c2 VARCHAR2(4000); 
    BEGIN
    FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP 
    Col_c2 := Col_c2||cur.c2; 
    END LOOP; 
    Col_c2 := rtrim(Col_c2,1);
    RETURN Col_c2; 
    END;
    /
    SQL> select distinct c1 ,get_c2(c1) cc2 from table;即可
      

  5.   

    qiaozhiwei(乔)的是针对一个特定表的,把qiaozhiwei(乔)的稍微改了一下,对这类表适用。
    FUNCTION GET_C2 (
       tmp_c1     NUMBER,     --第一列字段值
       col_c1     VARCHAR2,   --第一列字段名
       col_c2     VARCHAR2,   --第二列字段名
       tab_name   VARCHAR2    --表名
    )
       RETURN VARCHAR2
    IS
       type rc is ref cursor;
       cur rc;
       strsql   VARCHAR2 (4000);
       col_tmp  VARCHAR2 (4000);
       col_c    VARCHAR2 (4000);
    BEGIN
       strsql :=
             'select '
          || col_c2
          || ' from '
          || tab_name
          || ' where '
          || col_c1
          || '='
          || tmp_c1;   open cur for strsql;
       LOOP
          fetch cur into col_tmp;
          exit when cur%notfound;
          col_c := col_c || ',' || col_tmp;
       END LOOP;
       col_c := substr(col_c, 2,length(col_c));
       RETURN col_c;
    END;
    缺点:参数太多,调用起来麻烦。像楼主说的只用一个参数的那种不知道怎么写。
      

  6.   

    只能把Group By后面的字段作为函数的参数传进去!!可以用,号隔开!
    在函数里用动态Sql
      

  7.   

    8i里用lead和row_number函数处理吧,我在论坛里给过相应的写法,楼主可以找下