首先新建一张表 TEST
表结构如下
COUNTRY VARCHAR2(20) NOT NULL
CITY VARCHAR2(20) NOT NULL
SQL> select * from test;
- COUNTRY CITY
- -------------------- --------------------
- 中国 台北
- 中国 香港
- 中国 上海
- 日本 东京
- 日本 大阪
想得到的结果集,如下:
------- --------------------
中国 台北,香港,上海
日本 东京,大阪
怎么做呢???
实际就是对字符实现一个聚合功能,可是Oracle恰恰没有提供一个官方的聚合函数来实现。所以,需要我们自己动手写喽,呵呵。。
方法一:被集合字段范围小且固定型,这种方法的原理在于你已经知道CITY字段的值有几种,且还不算太多,如果太多这个SQL就会相当的长。
select t.country,
MAX(decode(t.city,'台北',t.city||',',NULL)) ||
MAX(decode(t.city,'香港',t.city||',',NULL))||
MAX(decode(t.city,'上海',t.city||',',NULL))||
MAX(decode(t.city,'东京',t.city||',',NULL))||
MAX(decode(t.city,'大阪',t.city||',',NULL))