易截截图软件、单文件、免安装、纯绿色、仅160KB

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

什么是合并多行字符串(连接字符串)呢,例如:
SQL> desc test;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
COUNTRY VARCHAR2(20) Y
CITY VARCHAR2(20) Y
SQL> select * from test;
COUNTRY CITY
-------------------- --------------------
中国 台北
中国 香港
中国 上海
日本 东京
日本 大阪
要求得到如下结果集:
------- --------------------
中国 台北,香港,上海
日本 东京,大阪
实际就是对字符实现一个聚合功能,我很奇怪为什么Oracle没有提供官方的聚合函数来实现它呢:)
下面就对几种经常提及的解决方案进行分析(有一个评测标准最高★★★★★):
1.被集合字段范围小且固定型 灵活性★ 性能★★★★ 难度 ★
这种方法的原理在于你已经知道 CITY字段的值有几种,且还不算太多,如果太多这个SQL就会相当的长。。看例子:
SQL> select t.country,
2 MAX(decode(t.city,'台北',t.city||',',NULL)) ||
3 MAX(decode(t.city,'香港',t.city||',',NULL))||
4 MAX(decode(t.city,'上海',t.city||',',NULL))||
5 MAX(decode(t.city,'东京',t.city||',',NULL))||
6 MAX(decode(t.city,'大阪',t.city||',',NULL))
7 from test t GROUP BY t.country
8 /
COUNTRY MAX(DECODE(T.CITY,'台北',T.CIT
-------------------- ------------------------------
中国 台北,香港,上海,
日本 东京,大阪,
大家一看,估计就明白了(如果不明白,好好补习MAX DECODE和分组)。这种方法无愧为最笨的方法,但是对某些应用来说,最有效的方法也许就是它。
2. 固定表固定字段函数法 灵活性★★ 性能★★★★ 难度 ★★
此法必须预先知道是哪个表,也就是说一个表就得写一个函数,不过方法1的一个取值就要便捷多了。在大多数应用中,也不会存在大量这种合并字符串的需求。废话完毕,看下面:
定义一个函数
create or replace function str_list( str_in in varchar2 )--分类字段
return varchar2
is
str_list varchar2(4000) default null;--连接后字符串
str varchar2(20) default null;--连接符号
begin
for x in ( select TEST.CITY from TEST where TEST.COUNTRY = str_in ) loop
str_list := str_list || str || to_char(x.city);
str := ', ';
end loop;
return str_list;
end;
使用:
SQL> select DISTINCT(T.country),list_func1(t.country) from t


相关文档:

深入了解 Oracle 10g 中新型层次查询选项

     我们可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的 层次查询,而Oracle 10g 为其添加许多了新的伪列。十多年以来,Oracle SQL 具有依照层次关系进行查询的功能。例如,你可以指定一个起始条件,然后根据一个或多个连接条件来确定孩子行的内容。举例来说,现在假设我有一个表,里面记 ......

多个oracle数据库之间数据共享 database link

因为公司的掌上城市系统在多个地势同时上线,而为了让每个城市的3G快讯具有地势特色性,每个地势有自己单独的数据库系统,而每个地势的快讯又一些共同的,譬如突然出了一条国际新闻,那么是不是每个地势的后台编辑都要录入一遍,这样无疑是做了许多无用功,所以公司考虑架设一个总站,总站上有专门的人负责,每天负责录入一 ......

oracle服务硬件升级 调整参数

author:skate
time:2010-05-13
1)If memory increases and you're 64-bit,  e.g  8G to 16G,  Oracle SGA and related parameters need adjust; So are some the Unix kernel parameters.
2)As for CPU related configuration,  some  parameters, based on CPU_co ......

ORACLE体系结构 实例

ORACLE实例有系统全局区(SGA)和一些后台进程组成.
系统全局区(SGA)有共享池(shared pool),数据库高速缓冲区(database buffer cache),重做日志缓冲区(redo log buffer).共享池又有库高速缓存(library cache)和数据字典高速缓存(dictionary cache)组成。
ORACLE 实例5个必需的后台进程:SMON,PMON,DBWR,LGWR, ......

oracle 数据类型详解 日期型

oracle 数据类型详解---日期型
      oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:
注:由于INTERVAL及TIME ZONE实际用得比较少,所以本文内容未涉及这两个方面。
1、常用日期型数据类型
1.1、DATE
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号