解决方案 »

  1.   

    仅供参考:、
    SQL> select * from test1;
     
             A          B          C
    ---------- ---------- ----------
             1          2          4
             1          3          4
             2          3          4
             3          3          4
             1          5          4
             1          2          3
             2          2          3SELECT A.A,
           ltrim(MAX(REPLACE(SYS_CONNECT_BY_PATH(B, '—'), '—', ',')),','),
           ltrim(MAX(REPLACE(SYS_CONNECT_BY_PATH(C, '—'), '—', ',')),',')
      FROM (SELECT T.*, ROW_NUMBER() OVER(PARTITION BY A ORDER BY B) AS RN
              FROM TEST1 T) A
     START WITH RN = 1
    CONNECT BY PRIOR RN = RN - 1
           AND PRIOR A = A
     GROUP BY A;结果:
    1 2,2,3,5  4,3,4,4
    2 2,3  3,4
    3 3  4
      

  2.   


    select a.FcaID,concat(a.FName,b.FName) from Table1 a, Table1 b group by a.FcaID;
      

  3.   


    select a.FcaID,concat(a.FName,b.FName) from Table1 a, Table1 b group by a.FcaID;这个有点问题,不对
      

  4.   

    谢谢楼上的两位朋友。这个concat的,经测试确实有问题
      

  5.   

    with table1 as 
    (
    select 001 FcaID,'卡片1' FName from dual union all
    select 001 FcaID,'卡片2' FName from dual union all
    select 002 FcaID,'卡片3' FName from dual union all
    select 002 FcaID,'卡片4' FName from dual union all
    select 002 FcaID,'卡片4' FName from dual 
    )
    select FcaID,listagg(FName, '') within group(order by rownum),replace(to_char(wm_concat(FName)),',','')   from table1 group by FcaID两种方法
     一种wm_concat 这种文档不推荐 12c已经去掉
     一种 listagg  推荐方法,可排序,可改变连接符
      

  6.   


    哥们,我在Oracle中执行,报错了啊
      

  7.   

    quote=引用 9 楼 hcl8260 的回复:]
    1#不行?哥们,我按照这个改成我的表名和字段....报错了啊。能不能帮我改成我这个表的字段和表名?谢谢~
    哥哥,还不行?
    with table1 as
     (select 001 FcaID, '卡片1' FName
        from dual
      union all
      select 001 FcaID, '卡片2' FName
        from dual
      union all
      select 002 FcaID, '卡片3' FName
        from dual
      union all
      select 002 FcaID, '卡片4' FName
        from dual
      union all
      select 002 FcaID, '卡片4' FName from dual)
    SELECT A.FcaID,
          MAX(REPLACE(SYS_CONNECT_BY_PATH(FName, '—'), '—', ''))
      FROM (SELECT T.*,
                   ROW_NUMBER() OVER(PARTITION BY FcaID ORDER BY FName) AS RN
              FROM table1 T) A
     START WITH RN = 1
    CONNECT BY PRIOR RN = RN - 1
           AND PRIOR FcaID = FcaID
     GROUP BY FcaID;
    [
      

  8.   


    select FcaID,listagg(FName,'') within group(order by FcaID) as newcol  from table1 group by FcaID
    /
      

  9.   

    concat有什么问题,多了个分隔的逗号么,那在处理下啊,listagg要11g的版本