oracle多行记录合并连接聚合字符串的几种方法

oracle多行记录合并连接聚合字符串的几种方法

ID:15508990

大小:36.50 KB

页数:10页

时间:2018-08-03

oracle多行记录合并连接聚合字符串的几种方法_第1页
oracle多行记录合并连接聚合字符串的几种方法_第2页
oracle多行记录合并连接聚合字符串的几种方法_第3页
oracle多行记录合并连接聚合字符串的几种方法_第4页
oracle多行记录合并连接聚合字符串的几种方法_第5页
资源描述:

《oracle多行记录合并连接聚合字符串的几种方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Oracle多行记录合并连接聚合字符串的几种方法怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结。什么是合并多行字符串(连接字符串)呢,例如:SQL>desctest;NameTypeNullableDefaultComments------------------------------------------COUNTRYVARCHAR2(20)YCITYVARCHAR2(20)YSQL>select*fromtest;COU

2、NTRYCITY----------------------------------------中国台北中国香港中国上海日本东京日本大阪要求得到如下结果集:---------------------------中国台北,香港,上海日本东京,大阪实际就是对字符实现一个聚合功能,我很奇怪为什么Oracle没有提供官方的聚合函数来实现它呢:)下面就对几种经常提及的解决方案进行分析(有一个评测标准最高★★★★★):1.被集合字段范围小且固定型灵活性★性能★★★★难度★这种方法的原理在于你已经知道CITY字段的值有几种,且还不算太

3、多,如果太多这个SQL就会相当的长。。看例子:SQL>selectt.country,2MAX(decode(t.city,'台北',t.city

4、

5、',',NULL))

6、

7、3MAX(decode(t.city,'香港',t.city

8、

9、',',NULL))

10、

11、4MAX(decode(t.city,'上海',t.city

12、

13、',',NULL))

14、

15、5MAX(decode(t.city,'东京',t.city

16、

17、',',NULL))

18、

19、6MAX(decode(t.city,'大阪',t.city

20、

21、',',NULL))7f

22、romtesttGROUPBYt.country8/COUNTRYMAX(DECODE(T.CITY,'台北',T.CIT--------------------------------------------------中国台北,香港,上海,日本东京,大阪,大家一看,估计就明白了(如果不明白,好好补习MAXDECODE和分组)。这种方法无愧为最笨的方法,但是对某些应用来说,最有效的方法也许就是它。2.固定表固定字段函数法灵活性★★性能★★★★难度★★此法必须预先知道是哪个表,也就是说一个表就得写一个函数,不过方法1的一

23、个取值就要便捷多了。在大多数应用中,也不会存在大量这种合并字符串的需求。废话完毕,看下面:定义一个函数createorreplacefunctionstr_list(str_ininvarchar2)--分类字段returnvarchar2isstr_listvarchar2(4000)defaultnull;--连接后字符串strvarchar2(20)defaultnull;--连接符号beginforxin(selectTEST.CITYfromTESTwhereTEST.COUNTRY=str_in)loopst

24、r_list:=str_list

25、

26、str

27、

28、to_char(x.city);str:=',';endloop;returnstr_list;end;使用:SQL>selectDISTINCT(T.country),list_func1(t.country)fromtestt;COUNTRYLIST_FUNC1(T.COUNTRY)------------------------------------中国台北,香港,上海日本东京,大阪SQL>selectt.country,str_list(t.country)from

29、testtGROUPBYt.country;COUNTRYSTR_LIST(T.COUNTRY)-------------------------------------------中国台北,香港,上海日本东京,大阪这个时候,使用分组和求唯一都可以满足要求。它的原理就是,根据唯一的分组字段country,在函数里面再次查询该字段对应的所有被合并列,使用PL/SQL将其合并输出。3.灵活表函数法灵活性★★★性能★★★难度★★★该方法是在方法2的基础上,使用动态SQL,将表名和字段名称传入,从而达到灵活的目的。createo

30、rreplacefunctionstr_list2(key_nameinvarchar2,keyinvarchar2,conameinvarchar2,tnameinvarchar2)returnvarchar2astypercisrefcursor;strvarchar2(4000);sepvarchar2(2);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。