SumString函数的5各参数的意思分别是: 
1. 表名; 
2. 你想Group BY的字段名 
3. 你想sum的那个字段名 
4. Group By字段的值 
5. Sum字符串时的分隔符 
CREATE OR REPLACE FUNCTION SumString(  
   I_TableName       IN VARCHAR2 ,  
   I_GroupColName    IN VARCHAR2 ,  
   I_ResultColName   IN VARCHAR2 ,  
   I_GroupColValue   IN VARCHAR2 , 
   I_Separator       IN VARCHAR2 
   ) 
RETURN VARCHAR2 IS 
   TYPE T_Cur IS REF CURSOR ; 
   C_Cur    T_Cur ; 
   V_Sql    VARCHAR2(2000) ; 
   V_Result VARCHAR2(2000) ; 
   V_Tmp VARCHAR2(200) ; 
   V_Cnt NUMBER := 0 ; 
BEGIN 
   V_Result := '' ; 
   V_Sql := 'SELECT '|| I_ResultColName ||' FROM '|| I_TableName ||' WHERE '|| I_GroupColName || ' = '''|| I_GroupColValue || '''' ; 
   OPEN C_Cur FOR V_Sql ; 
   LOOP 
     FETCH C_Cur INTO V_Tmp ; 
     EXIT WHEN C_Cur%NOTFOUND ; 
     IF V_Cnt = 0 THEN 
        V_Result := V_Tmp ; 
     ELSE 
        V_Result := V_Result || I_Separator || V_Tmp  ; 
     END IF ; 
     V_Cnt := V_Cnt + 1 ; 
   END LOOP ; 
   CLOSE C_Cur ; 
    
   RETURN V_Result ; 
END SUMSTRING; SELECT id, SumString( '表', 'id' , 'name' , 'id' , '-' ) SUM_B FROM 表 GROUP BY id;

解决方案 »

  1.   

    Debug:
    ---------------------------------------------------------------------------
    SELECT id, SumString('表','id','name',id,'-') SUM_B FROM 表 GROUP BY id;
      

  2.   

    多谢,那能不能做到这样:表(name:test):
    id   name  address
    1    A      a
    1    B      b
    2    C      c
    2    D      d
    2    E      e检索得到:
    id   nameaddress
    1    Aa-Bb
    2    Cc-Dd-Ee
      

  3.   

    name 换成 name||address 就可以了呀。。(那个函数好啊,要我就用proc做了,省心)SELECT id, SumString('表','id','name||address',id,'-') SUM_B FROM 表 GROUP BY id;