select U.LOGIN_ID,F.Function_Name
from USER U, ROLE R, ROLE_PERMISSION  P, FUNCTION F
 where U.ROLE_ID = R.ROLE_ID
 and P.ROLE_ID = R.Role_Id
 and P.FUNCTION_ID = F.Function_Id
其中一个Login_id 有多条Function_Name,
现在想做的是一个多条Function_Name用"|"连接起来,
这样一个LOGIN_id 只有一条记录, 该怎么做呢?

解决方案 »

  1.   

    select U.LOGIN_ID,replace(wmsys.wm_concat(F.Function_Name),',','|') from .... group by U.LOGIN_ID;
      

  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                                 
    2 rows selected
    */