a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 96|回复: 0

[考试辅导] Oracle技术:如何在ORACLE中聚集合并字符串

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
sql中有聚集函数sum,但只能计算数值型,如(本文中试验都是在scott用户下):' F; q. }( }9 }
  SQL> select deptno,sum(sal) asal8 ~* W# ~4 C4 b; f3 D
  from emp a
$ C, d' P; R9 S3 m" E+ l& d  group by deptno;
4 b/ c0 o& k$ b' ]; |1 U/ `  DEPTNO ASAL* K6 E0 f) m& k: U, M' f
  30 9400# z+ G" u( {5 i1 y' M# Q4 w4 H  L
  20 108752 m9 \# z& [* c3 }' M
  10 8750  l% W  H4 E, T9 j$ S
  有时要想分组查看每个部门的人员列表如下结果:7 x! J6 y3 E) L
  DEPTNO ENAME
& Z  J7 P2 x7 Y( e5 h  10 CLARK,KING,MILLER, R$ Z3 h4 K3 W" e6 O2 z7 @
  20 SMITH,FORD,ADAMS,SCOTT,JONES* x5 e$ p9 p; c' Q$ a; s7 R; `
  30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD+ v+ }* N& a6 E! E* m: Y
  标准sql没有提供这个方法。
3 x; L% a$ R. z1 W5 \% |  SQL> select deptno,sum(ename) ename
  W" H* [8 T2 L3 `1 S' L+ C5 S  from emp a
+ B% u& b+ o% ^& K/ b( ?  group by deptno;
% X! K0 w, y# }) I; w  select deptno,sum(ename) ename" P' V3 D! g- \7 ]3 z9 E2 b
  *
% @( X0 `& A3 S# P* M8 W) r  第 1 行出现错误:- }6 D$ L, F3 l7 o$ x. P
  ORA01722: 无效数字
& ~  X% E( g7 U2 s% Y8 F0 _( v  oracle10g提供了一个函数wmsys.wm_concat可以实现:
1 f: |) j- W7 w& i: @  SQL> select deptno,wmsys.wm_concat(ename) ename
, N* c3 C% `# X. I! R. @1 m& t  from emp a
2 k6 u: k! |; |8 [- C$ o  group by deptno;7 p6 G3 G+ d4 N4 c, s2 G
  DEPTNO ENAME
( A( y# Q1 J1 u, c; ?# l# ~4 h  10 CLARK,KING,MILLER
$ o! p: ?  |3 }% V( |; M+ E$ Y  20 SMITH,FORD,ADAMS,SCOTT,JONES# w0 i6 E/ K3 S: Q
  30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
9 o9 N' D" k8 c# Q6 h0 Q" f+ q  正是想要的结果。
+ v, {" O$ d7 ~  e  但是在10g以下版本怎么办呢?
! G! u5 Y' }1 |8 K. h. U  在oracle9i可以用connect by 实现,但成本很高:
1 v* O# @1 \7 F* [  SQL> select deptno,substr(max(sys_connect_by_path(ename,',')),2) ename1 H% c6 j" R( w  d7 E
  from (select a.*,row_number()over(partition by deptno order by empno) rn from emp a )
7 j$ _4 i* h, q7 Y- g  group by deptno/ C, F& `! p. P0 b# b
  start with rn=16 B4 Y9 n# m5 K5 O; {: W
  connect by rn1=prior rn and deptno=prior deptno
  m! P9 n: Y9 p& I3 W( K! N  order by deptno;* y$ i2 @2 }: [5 q  I
  DEPTNO ENAME2 X5 ?( l; J# ?0 d* Z
  10 CLARK,KING,MILLER& M' y/ g5 |& }% A- E0 v( L
  20 SMITH,JONES,SCOTT,ADAMS,FORD) Z7 j; _, b' o: h
  30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
& Z+ x+ e. i1 V8 n- h2 u  结果也正确。这个sql参考了一下其他人的例子,并用到了分析函数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 18:42 , Processed in 0.173697 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表