本帖最后由 scy251147 于 2010-07-28 16:07:12 编辑

解决方案 »

  1.   

    SELECT sws_dm ,sws_mc,replace(wm_concat(ry_mc),',',';'),COUNT(1)
      FROM TABLE 
     GROUP BY sws_dm ,sws_mc
      

  2.   

    --试下看
    select sws_dm,sws_mc,wm_concat(ry_mc) ry_mc,count(1) 总
    from tb
    group by sws_dm,sws_mc
      

  3.   

    我用的oracle 11g,没有wm_concat这个函数呀
      

  4.   


    select sws_dm,sws_mc,replace(wm_concat(ry_mc),',',';') ry_mc,count(1) 总
    from tb
    group by sws_dm,sws_mc
      

  5.   

     
    SQL> select * from test;
     
    YDID       SWS_DM     SWS_MC     RY_DM      RY_MC
    ---------- ---------- ---------- ---------- ----------
    1          1          第一税务所 100        张飞
    2          1          第一税务所 101        赵云
    3          1          第一税务所 102        马超
    4          1          第一税务所 103        黄忠
    5          1          第一税务所 104        关羽
    6          2          第二税务所 200        程昱
    7          2          第二税务所 201        贾诩
    8          2          第二税务所 202        郭嘉
    9          2          第二税务所 203        荀彧
    10         2          第二税务所 204        荀攸
    11         3          第三税务所 300        司马懿
    12         3          第三税务所 301        曹洪
    13         3          第三税务所 302        曹仁
    14         3          第三税务所 303        夏侯渊
    15         3          第三税务所 304        阿速达
    16         4          第四税务所 401        黄月英
    17         4          第四税务所 402        庞统
    18         4          第四税务所 403        马岱
    19         4          第四税务所 404        刘备
    20         5          第五税务所 500        陆逊
     
    20 rows selected
     
    SQL> 
    SQL> SELECT sws_dm ,sws_mc,replace(wm_concat(ry_mc),',',';'),COUNT(1)
      2    FROM test
      3   GROUP BY sws_dm ,sws_mc;
     
    SWS_DM     SWS_MC     REPLACE(WM_CONCAT(RY_MC),',','                                                     COUNT(1)
    ---------- ---------- -------------------------------------------------------------------------------- ----------
    1          第一税务所 张飞;赵云;马超;关羽;黄忠                                                                  5
    2          第二税务所 程昱;贾诩;郭嘉;荀攸;荀彧                                                                  5
    3          第三税务所 司马懿;阿速达;夏侯渊;曹洪;曹仁                                                            5
    4          第四税务所 黄月英;马岱;刘备;庞统                                                                     4
    5          第五税务所 陆逊                                                                                      1
     
    SQL> 
      

  6.   

     
    SQL> select * from test;
     
    YDID       SWS_DM     SWS_MC     RY_DM      RY_MC
    ---------- ---------- ---------- ---------- ----------
    1          1          第一税务所 100        张飞
    2          1          第一税务所 101        赵云
    3          1          第一税务所 102        马超
    4          1          第一税务所 103        黄忠
    5          1          第一税务所 104        关羽
    6          2          第二税务所 200        程昱
    7          2          第二税务所 201        贾诩
    8          2          第二税务所 202        郭嘉
    9          2          第二税务所 203        荀彧
    10         2          第二税务所 204        荀攸
    11         3          第三税务所 300        司马懿
    12         3          第三税务所 301        曹洪
    13         3          第三税务所 302        曹仁
    14         3          第三税务所 303        夏侯渊
    15         3          第三税务所 304        阿速达
    16         4          第四税务所 401        黄月英
    17         4          第四税务所 402        庞统
    18         4          第四税务所 403        马岱
    19         4          第四税务所 404        刘备
    20         5          第五税务所 500        陆逊
     
    20 rows selected
     
    SQL> 
    SQL> SELECT sws_dm ,sws_mc,replace(wm_concat(ry_mc),',',';'),COUNT(1)
      2    FROM test
      3   GROUP BY sws_dm ,sws_mc;
     
    SWS_DM     SWS_MC     REPLACE(WM_CONCAT(RY_MC),',','                                                     COUNT(1)
    ---------- ---------- -------------------------------------------------------------------------------- ----------
    1          第一税务所 张飞;赵云;马超;关羽;黄忠                                                                  5
    2          第二税务所 程昱;贾诩;郭嘉;荀攸;荀彧                                                                  5
    3          第三税务所 司马懿;阿速达;夏侯渊;曹洪;曹仁                                                            5
    4          第四税务所 黄月英;马岱;刘备;庞统                                                                     4
    5          第五税务所 陆逊                                                                                      1
     
    SQL> 
      

  7.   

    不好意思 ,oracle提示“SQL Error: ORA-00904: "WM_CONCAT": 无效的标识符”
      

  8.   


    不好意思 ,oracle提示“SQL Error: ORA-00904: "WM_CONCAT": 无效的标识符”
      

  9.   

    不是吧,11g不支持么
    SQL> SELECT sws_dm,sws_mc,ry_mc,总 FROM
      2  (SELECT sws_dm,sws_mc,sYS_CONNECT_BY_PATH(ry_mc,';') ry_mc,LEVEL 总 ,CONNECT_BY_ISLEAF leaf
      3  FROM test a
      4  START WITH NOT EXISTS(SELECT 1 FROM test b WHERE a.sws_dm=b.sws_dm AND a.sws_mc=b.sws_mc AND b.ry_dm<a.ry_dm)
      5  CONNECT BY NOCYCLE PRIOR sws_dm=sws_dm  AND PRIOR a.ry_dm=ry_dm-1    )
      6  WHERE leaf=1
      7  ;
     
    SWS_DM     SWS_MC     RY_MC                                                                                     总
    ---------- ---------- -------------------------------------------------------------------------------- ----------
    1          第一税务所 ;张飞;赵云;马超;黄忠;关羽                                                                 5
    2          第二税务所 ;程昱;贾诩;郭嘉;荀彧;荀攸                                                                 5
    3          第三税务所 ;司马懿;曹洪;曹仁;夏侯渊;阿速达                                                           5
    4          第四税务所 ;黄月英;庞统;马岱;刘备                                                                    4
    5          第五税务所 ;陆逊                                                                                     1
     
    SQL> 
      

  10.   

    我给你写个
    10g:
    select sws_dm, sws_mc, replace(wm_concat(ry_mc),',',';')ry_mc,count(*) 总人数
    from tab
    group by sws_dm, sws_mc;11g:
    select sws_dm, sws_mc,
    max(replace(substr(sys_connect_by_path(ry_mc, '*'), 2),'*',';')),count(*) 总人数
    from(
    select sws_dm, sws_mc,ry_mc,
    dense_rank()over(order by sws_dm) + row_number()over(order by sws_dm)  rid,
    row_number() over (partition by sws_dm order by sws_dm)  nid
    from tab)
    start with nid = 1
    connect by prior rid = rid - 1
    GROUP BY  sws_dm,sws_mc;
      

  11.   

    如果你的ry_dm可能不连续的话,可以这样再处理下
    SQL> SELECT sws_dm,sws_mc,ry_mc,总 FROM
      2  (SELECT sws_dm,sws_mc,sYS_CONNECT_BY_PATH(ry_mc,';') ry_mc,LEVEL 总 ,CONNECT_BY_ISLEAF leaf
      3  FROM
      4  (SELECT YDID ,SWS_DM, SWS_MC , RY_DM,  RY_MC,row_number()over(PARTITION BY sws_dm ORDER BY ry_dm) rn FROM test )a
      5  START WITH NOT EXISTS(SELECT 1 FROM test b WHERE a.sws_dm=b.sws_dm AND a.sws_mc=b.sws_mc AND b.ry_dm<a.ry_dm)
      6  CONNECT BY NOCYCLE PRIOR sws_dm=sws_dm  AND PRIOR a.rn=rn-1    )
      7  WHERE leaf=1  ;
     
    SWS_DM     SWS_MC     RY_MC                                                                                     总
    ---------- ---------- -------------------------------------------------------------------------------- ----------
    1          第一税务所 ;张飞;赵云;马超;黄忠;关羽                                                                 5
    2          第二税务所 ;程昱;贾诩;郭嘉;荀彧;荀攸                                                                 5
    3          第三税务所 ;司马懿;曹洪;曹仁;夏侯渊;阿速达                                                           5
    4          第四税务所 ;黄月英;庞统;马岱;刘备                                                                    4
    5          第五税务所 ;陆逊                                                                                     1
     
    SQL> 
      

  12.   

    借鉴下12楼,更改下start with 条件
    SQL> SELECT sws_dm,sws_mc,ry_mc,总 FROM
      2      (SELECT sws_dm,sws_mc,sYS_CONNECT_BY_PATH(ry_mc,';') ry_mc,LEVEL 总 ,CONNECT_BY_ISLEAF leaf
      3      FROM
      4      (SELECT YDID ,SWS_DM, SWS_MC , RY_DM,  RY_MC,row_number()over(PARTITION BY sws_dm ORDER BY ry_dm) rn FROM test )a
      5      START WITH rn=1
      6      CONNECT BY NOCYCLE PRIOR sws_dm=sws_dm  AND PRIOR a.rn=rn-1    )
      7      WHERE leaf=1  ;
     
    SWS_DM     SWS_MC     RY_MC                                                                                     总
    ---------- ---------- -------------------------------------------------------------------------------- ----------
    1          第一税务所 ;张飞;赵云;马超;黄忠;关羽                                                                 5
    2          第二税务所 ;程昱;贾诩;郭嘉;荀彧;荀攸                                                                 5
    3          第三税务所 ;司马懿;曹洪;曹仁;夏侯渊;阿速达                                                           5
    4          第四税务所 ;黄月英;庞统;马岱;刘备                                                                    4
    5          第五税务所 ;陆逊                                                                                     1
     
    SQL> 
      

  13.   

    WMSYS.WM_CONCAT 此函数,需要安装中,包含wmsys
      

  14.   

    SQL> select sws_dm,sws_mc,wmsys.wm_concat(ry_mc),count(*) from tablename group by(sws_dm,sws_mc);