不是吧,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 ;
我给你写个 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;
如果你的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 ;
借鉴下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 ;
FROM TABLE
GROUP BY sws_dm ,sws_mc
select sws_dm,sws_mc,wm_concat(ry_mc) ry_mc,count(1) 总
from tb
group by sws_dm,sws_mc
select sws_dm,sws_mc,replace(wm_concat(ry_mc),',',';') ry_mc,count(1) 总
from tb
group by sws_dm,sws_mc
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>
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>
不好意思 ,oracle提示“SQL Error: ORA-00904: "WM_CONCAT": 无效的标识符”
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>
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;
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>
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>