WEB开发网
开发学院数据库Oracle Oracle多行记录字符串综合操作几种方法 阅读

Oracle多行记录字符串综合操作几种方法

 2007-06-21 12:33:06 来源:WEB开发网   
核心提示:怎么合并多行记录的字符串,一直是Oracle新手喜欢问的SQL问题之一,Oracle多行记录字符串综合操作几种方法,关于这个问题的帖子我看过不下30个了,现在就对这个问题,下面就对几种经常提及的解决方案进行分析(有一个评测标准最高★★★★★):1.被集合字段范围小且固定型:灵活性★ 性能★★★★ 难度 ★这种方法的原理

怎么合并多行记录的字符串,一直是Oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结。

合并

什么是合并多行字符串(连接字符串)呢,例如:

SQL> desc test;
Name  Type     Nullable Default Comments
------- ------------ -------- ------- --------
COUNTRY VARCHAR2(20) Y            
CITY  VARCHAR2(20) Y            
SQL> select * from test;
COUNTRY       CITY
-------------------- --------------------
中国         台北
中国         香港
中国         上海
日本         东京
日本         大阪
要求得到如下结果集:
-------  --------------------
中国    台北,香港,上海
日本    东京,大阪

实际就是对字符实现一个聚合功能。

下面就对几种经常提及的解决方案进行分析(有一个评测标准最高★★★★★):

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
-------------------- ------------------------------
中国         台北,香港,上海,
日本         东京,大阪,

1 2 3 4 5  下一页

Tags:Oracle 多行 记录

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接