Oracle字段的轉(zhuǎn)字符串實(shí)際操作方案
以下的文章是通過(guò)Oracle字段轉(zhuǎn)字符串以及其多行記錄合并/連接/聚合字符串的幾種常用方法的具體操作,如果你對(duì)其相關(guān)的實(shí)際操作有興趣的話(huà),你就可以對(duì)以下的文章點(diǎn)擊觀(guān)看了。
怎么合并多行記錄的字符串,一直是oracle新手喜歡問(wèn)的SQL問(wèn)題之一,關(guān)于這個(gè)問(wèn)題的帖子我看過(guò)不下30個(gè)了,現(xiàn)在就對(duì)這個(gè)問(wèn)題,進(jìn)行一個(gè)總結(jié)。
什么是合并多行字符串(連接字符串)呢,例如:
- SQL> desc test;
- Name Type Nullable Default Comments
- COUNTRY VARCHAR2(20) Y
- CITY VARCHAR2(20) Y
- SQL> select * from test;
- COUNTRY CITY
中國(guó) 臺(tái)北
中國(guó) 香港
中國(guó) 上海
日本 東京
日本 大阪
要求得到如下結(jié)果集:
中國(guó) 臺(tái)北,香港,上海
日本 東京,大阪
實(shí)際就是對(duì)字符實(shí)現(xiàn)一個(gè)聚合功能,我很奇怪為什么Oracle沒(méi)有提供官方的聚合函數(shù)來(lái)實(shí)現(xiàn)它呢:)
下面就對(duì)幾種經(jīng)常提及的解決方案進(jìn)行分析
1.被集合Oracle字段范圍小且固定型
這種方法的原理在于你已經(jīng)知道CITY字段的值有幾種,且還不算太多,如果太多這個(gè)SQL就會(huì)相當(dāng)?shù)?/p>
長(zhǎng)??蠢樱?/p>
SQL> select t.country,
2 MAX(decode(t.city,'臺(tái)北',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 /
上述的相關(guān)內(nèi)容就是對(duì)Oracle字段轉(zhuǎn)字符串以及多行記錄合并/連接/聚合字符串的幾種方法的部分描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
【編輯推薦】