数据库中记录如果是 get_request_line_no(integer)  wagon_no(varchar2) storage_no(varchar2)
                          1111                           c1            12
                          1111                           c1            13
                          1111                           c2            18
怎么样能搞成两条记录变成
                              1111                           c1            12,13
                          1111                            c2             18
按照get_request_line_no,  wagon_no 合并记录,合并的字段用,号隔开select get_request_line_no, SUBSTR(MAX(SYS_CONNECT_BY_PATH(storage_no, ',')), 2) as stgroup_no, wagon_no
               
          FROM (select distinct l.get_request_line_no,l.wagon_no,storage_no,
                       
                       l.get_request_line_no + row_number() over(order by l.get_request_line_no) rn,
                       row_number() over(partition by l.get_request_line_no order by l.get_request_line_no) rn1
                  from oil_train_to_deliver l
                                   group by get_request_line_no,wagon_no,storage_no)
                  
         START WITH rn1 = 1
        connect by rn - 1 = prior rn
         group by get_request_line_no,wagon_no
小弟写出来的不对  求大侠帮忙

解决方案 »

  1.   

    10g:select get_request_line_no,  wagon_no, wmsys.wm_concat(storage_no)
      from you_tab
     group by get_request_line_no,  wagon_no9i可用自定义聚集函数
      

  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
    */