表的结构为:
CateId   UserId
cate1       user1
cate1       user2
cate2       user2
我要得到这样的结果:
CateId   Users
cate1    user1,user2
cate2    user2
这个sql该怎么写?

解决方案 »

  1.   

    10g
    用select cateid,wmsys.wm_concat(userid) users from tablename
      

  2.   

    wmsys.wm_concat赚的分真不少,哈哈
      

  3.   

    看来这样的需求真不少啊,
    oracle牛就是在于这一点,很多函数都能顺应市场要求啊
      

  4.   

    select cateid,wmsys.wm_concat(userid) users from tablename group by cateid  -- 少了个group by,真大意啊
      

  5.   


    select cateid,wmsys.wm_concat(userid) users from tableA group by cateid;--to linzhangs:少了group by cateid可是不行的啊?!
      

  6.   

    呵呵。太快了,高兴太早了。人家是9的
    的用sys_connect_by_path了
      

  7.   

    9.2的只能使用function或是procedure来处理了。
      

  8.   

    给你搞出来了。真麻烦!
    SQL> select * from ttt;
     
    CATEID     USERID
    ---------- ----------
    cate1      user1
    cate1      user2
    cate2      user2
     
    SQL> 
    SQL> select cateid, substr(max(sys_connect_by_path(userid, ',')), 2) users
      2    from (select cateid,
      3                 userid,
      4                 rn + row_number() over(order by rn) rn1,
      5                 row_number() over(partition by rn order by rn) rn2
      6            from (select a.cateid, a.userid, rn
      7                    from ttt a
      8                    left join (select cateid, rownum rn
      9                                from (select distinct cateid from ttt)) b on a.cateid =
     10                                                                             b.cateid
     11                   order by 1, 2))
     12   start with rn2 = 1
     13  connect by prior rn1 = rn2
     14   group by cateid
     15  ;
     
    CATEID     USERS
    ---------- --------------------------------------------------------------------------------
    cate1      user1,user2
    cate2      user2