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

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

ID:5767373

大小:37.00 KB

页数:7页

时间:2017-12-24

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

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

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

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

3、code(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))7fromtesttGROUPBYt.country8/COUNTRYMAX(DECODE(T.CITY,'台北',T.CIT------------------------

22、--------------------------中国台北,香港,上海,日本东京,大阪,大家一看,估计就明白了(如果不明白,好好补习MAXDECODE和分组)。这种方法无愧为最笨的方法,但是对某些应用来说,最有效的方法也许就是它。2.固定表固定字段函数法灵活性★★性能★★★★难度★★此法必须预先知道是哪个表,也就是说一个表就得写一个函数,不过方法1的一个取值就要便捷多了。在大多数应用中,也不会存在大量这种合并字符串的需求。废话完毕,看下面:定义一个函数createorreplacefunctionstr_list(str_ininvarchar2)--分类字段returnvarchar2

23、isstr_listvarchar2(4000)defaultnull;--连接后字符串strvarchar2(20)defaultnull;--连接符号beginforxin(selectTEST.CITYfromTESTwhereTEST.COUNTRY=str_in)loopstr_list:=str_list

24、

25、str

26、

27、to_char(x.city);str:=',';endloop;returnstr_list;end;使用:SQL>selectDISTINCT(T.country),list_func1(t.country)fromtestt;COUNTRYLIST_FUNC

28、1(T.COUNTRY)------------------------------------中国台北,香港,上海日本东京,大阪SQL>selectt.country,str_list(t.country)fromtesttGROUPBYt.country;COUNTRYSTR_LIST(T.COUNTRY)-------------------------------------------中国台北,香港,上海日本东京,大阪这个时候,使用分组和求唯一都可以满足要求。它的原理就是,根据唯一的分组字段country,在函数里面再次查询该字段对应的所有被合并列,使用PL/SQL将其合并输出。

29、3.灵活表函数法灵活性★★★性能★★★难度★★★该方法是在方法2的基础上,使用动态SQL,将表名和字段名称传入,从而达到灵活的目的。createorreplacefunctionstr_list2(key_nameinvarchar2,keyinvarchar2,conameinvarchar2,tnameinvarchar2)returnvarchar2astypercisrefcursor;strvarchar2(4

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

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

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