数据库中分组字符串相加
--该测试脚本可以直接运行
--现在想把数据库中数据按照固定字段分组相加,数据这里总结了5种方法。库中

--创建测试表、分组添加测试数据
复制createtable test(id varchar2(10),字符mc varchar2(50)); insertinto test values(1,11111); insertinto test values(1,22222); insertinto test values(2,11111); insertinto test values(2,22222); insertinto test values(3,11111); insertinto test values(3,22222); insertinto test values(3,33333); commit; 1.2.3.4.5.6.7.8.9.--方法一:
复制set serveroutput onsize 1000000 declare union_mc varchar2(200); begin for cur_a in(selectdistinct id from test) loop for cur_b in(select mc from test where id=cur_a.id) loop union_mc:=union_mc||cur_b.mc; end loop; dbms_output.put_line(cur_a.id||chr(9)||union_mc); union_mc := ; end loop; end; / 1.2.3.4.5.6.7.8.9.10.11.12.13.--方法二:
复制CREATEORREPLACEfunction link(v_id varchar2) return varchar2 is union_mc varchar2(200); begin for cur in (select mc from test where id=v_id) loop union_mc := union_mc||cur.mc; end loop; union_mc := rtrim(union_mc,1); return union_mc; end; / select id,link(id) from test groupby id; 1.2.3.4.5.6.7.8.9.10.11.12.13.14.--方法三:
/*从Oracle 9i开始,开发者可以创建用户自定义的串相合计函数,除了PL/SQL外,数据还可以使用任何Oralce所支持的库中语言(如C++或者Java)来创建合计函数。TYPE头定义必须包含ODCIAggregateInitialize、分组ODCIAggregateIterate、字符ODCIAggregateMerge和ODCIAggregateTerminate这四个接口函数。串相*/
/*Initialize函数对数据组各个需要处理的数据字段各运行一次。自然的库中,我需要为每一个值准备一个新的分组清单,所以需要初始化持久变量list,IT技术网字符这里初始化值为null。串相*/
/*Iterate函数处理返回的行,所以实际上是由它来创建返回的值的清单。先测试list是否为空,如果为空,就把list直接设置为所引入的value值;如果list变量非空,则给list添加一个逗号后再插入value值,list的最大允许字符数32767。*/
/*Terminate函数在数据组的每个行的感兴趣字段数据被处理后执行。企商汇在这个函数中我只需简单的返回清单变量即可。*/
/*Merge函数,用来返回成功标记的。*/
/*创建自己的合计函数扩展了Oracle统计和文本处理能力。*/
复制createorreplace type t_cat as object ( union_mc VARCHAR2(200), staticfunction ODCIAggregateInitialize(sctx INOUT t_cat) return number, member function ODCIAggregateIterate(self INOUT t_cat,value IN varchar2) return number, member function ODCIAggregateTerminate(self IN t_cat,returnValue OUT varchar2, flags IN number) return number, member function ODCIAggregateMerge(self INOUT t_cat,ctx2 IN t_cat) return number ); createorreplace type body t_cat is staticfunction ODCIAggregateInitialize(sctx INOUT t_cat ) return number is begin sctx := t_cat(); return ODCIConst.Success; end; member function ODCIAggregateIterate(self INOUT t_cat, value IN varchar2) return number is begin self.union_mc := self.union_mc || value; return ODCIConst.Success; end; member function ODCIAggregateTerminate(self IN t_cat, returnValue OUT varchar2, flags IN number) return number is begin returnValue := self.union_mc; return ODCIConst.Success; end; member function ODCIAggregateMerge(self INOUT t_cat , ctx2 IN t_cat ) return number is begin return ODCIConst.Success; end; end; / 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33./*如果你的Oracle服务器没有配置成支持并行处理的方式,可以去掉参数PARALLEL_ENABLE*/
create or replace function catstr(v_mc varchar2) return varchar2 PARALLEL_ENABLE AGGREGATE USING t_cat;
/select id,catstr(mc) from test group by id;
--方法四:
--oracle9i以上版本
复制select id,ltrim(max(sys_connect_by_path(mc,;)),;) from( select id,mc,row_number() over(partition by id orderby id) id1, row_number() over(orderby id) + dense_rank() over(orderby id) id2 from test ) start with id1=1 connectbyprior id2 = id2 -1 groupby id orderby id; 1.2.3.4.5.6.7.方法四的另一种写法
估计类似的写法还有很多,这个和上一个不同在于用的没有带有start with(filter功能)的connect,并借助level和first_value来实现。
复制SELECTdistinct id,ltrim(first_value(mc_add) over (partition by id orderBY l DESC),;) from ( SELECT id,LEVEL l,sys_connect_by_path(mc,;) mc_add from ( select id||rownum rn,id||rownum-1 rn_small,id,mc from test ) CONNECTBYPRIOR rn = rn_small ) ; 1.2.3.4.5.6.7.8.9.方法五:
复制select id,wm_concat(mc) from test groupby id 1.云南idc服务商相关文章
电脑循环风扇机箱安装教程(轻松学习如何正确安装电脑循环风扇机箱)
摘要:电脑循环风扇机箱的安装对于保持电脑硬件的稳定运行非常重要。正确安装风扇机箱可以有效降低硬件温度,延长电脑寿命。本文将为你详细介绍如何正确安装电脑循环风扇机箱。1.确定机箱内...2025-11-04- 也许以前你是xp系统的麦克风设置高手,只要是xp系统什么样的麦克风设置你都能解决。但是现在喜欢玩游戏的人大部分都换了Windows 7系统。那么你以前掌握的xp麦克风设置只能当做参考了,假如你以前是麦2025-11-04
用户在限制USB设备使用方面,首先考虑的就是禁止其自动播放,以避免木马病毒入侵,但很多时候,这样的方法并不是很有效。假如你是Windows 7用户,那就可以通过它独有的“权限控制”技术,从源头上控制U2025-11-04
扫雷游戏是Windows自带的一款经典游戏,许多Windows 7用户都会在闲暇之余玩一会扫雷,重温当年的经典。Windows 7扫雷游戏比起之前的更为不同,它可以自由更换外观,即使是这一小点的改变,2025-11-04电脑word文档教程表格的使用方法(掌握word表格的关键技巧,轻松编辑文档)
摘要:在现代社会中,电脑已经成为我们工作和学习的重要工具之一。而其中最常用的办公软件之一就是MicrosoftOffice中的Word。Word提供了丰富的功能和工具,使得我们能够轻松地...2025-11-04
windows 7如何卸载ie10 windows 7怎样卸载IE10恢复到IE8或者是IE
微软已开放了针对Windows 7的IE10预览版下载,IE10是专为Windows 8而开发的一款浏览器,在WI8上面使用感觉很流畅,浏览体验也很好。在Windows 7上安装IE10后,会直接把I2025-11-04

最新评论