oracle多行記錄合并連接聚合字符串的幾種方法

oracle多行記錄合并連接聚合字符串的幾種方法

ID:11940784

大小:37.00 KB

頁數(shù):7頁

時間:2018-07-15

oracle多行記錄合并連接聚合字符串的幾種方法_第1頁
oracle多行記錄合并連接聚合字符串的幾種方法_第2頁
oracle多行記錄合并連接聚合字符串的幾種方法_第3頁
oracle多行記錄合并連接聚合字符串的幾種方法_第4頁
oracle多行記錄合并連接聚合字符串的幾種方法_第5頁
資源描述:

《oracle多行記錄合并連接聚合字符串的幾種方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、Oracle多行記錄合并/連接/聚合字符串的幾種方法[轉(zhuǎn)]2008-09-1311:32怎么合并多行記錄的字符串,一直是oracle新手喜歡問的SQL問題之一,關(guān)于這個問題的帖子我看過不下30個了,現(xiàn)在就對這個問題,進行一個總結(jié)。什么是合并多行字符串(連接字符串)呢,例如:SQL>desctest;NameTypeNullableDefaultComments------------------------------------------COUNTRYVARCHAR2(20)YCITYVARCHAR2(20)YSQL>select*fro

2、mtest;COUNTRYCITY----------------------------------------中國臺北中國香港中國上海日本東京日本大阪要求得到如下結(jié)果集:---------------------------中國臺北,香港,上海日本東京,大阪實際就是對字符實現(xiàn)一個聚合功能,我很奇怪為什么Oracle沒有提供官方的聚合函數(shù)來實現(xiàn)它呢:)下面就對幾種經(jīng)常提及的解決方案進行分析(有一個評測標準最高★★★★★):1.被集合字段范圍小且固定型靈活性★性能★★★★難度★這種方法的原理在于你已經(jīng)知道CITY字段的值有幾種,且還不算太多,

3、如果太多這個SQL就會相當?shù)拈L。??蠢樱篠QL>selectt.country,2MAX(decode(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))7fromtesttGROUP

22、BYt.country8/COUNTRYMAX(DECODE(T.CITY,'臺北',T.CIT--------------------------------------------------中國臺北,香港,上海,日本東京,大阪,大家一看,估計就明白了(如果不明白,好好補習MAXDECODE和分組)。這種方法無愧為最笨的方法,但是對某些應(yīng)用來說,最有效的方法也許就是它。2.固定表固定字段函數(shù)法靈活性★★性能★★★★難度★★此法必須預(yù)先知道是哪個表,也就是說一個表就得寫一個函數(shù),不過方法1的一個取值就要便捷多了。在大多數(shù)應(yīng)用中,也不會存在大

23、量這種合并字符串的需求。廢話完畢,看下面:定義一個函數(shù)createorreplacefunctionstr_list(str_ininvarchar2)--分類字段returnvarchar2isstr_listvarchar2(4000)defaultnull;--連接后字符串strvarchar2(20)defaultnull;--連接符號beginforxin(selectTEST.CITYfromTESTwhereTEST.COUNTRY=str_in)loopstr_list:=str_list

24、

25、str

26、

27、to_char(x.ci

28、ty);str:=',';endloop;returnstr_list;end;使用:SQL>selectDISTINCT(T.country),list_func1(t.country)fromtestt;COUNTRYLIST_FUNC1(T.COUNTRY)------------------------------------中國臺北,香港,上海日本東京,大阪SQL>selectt.country,str_list(t.country)fromtesttGROUPBYt.country;COUNTRYSTR_LIST(T.COUNTR

29、Y)-------------------------------------------中國臺北,香港,上海日本東京,大阪這個時候,使用分組和求唯一都可以滿足要求。它的原理就是,根據(jù)唯一的分組字段country,在函數(shù)里面再次查詢該字段對應(yīng)的所有被合并列,使用PL/SQL將其合并輸出。3.靈活表函數(shù)法靈活性★★★性能★★★難度★★★該方法是在方法2的基礎(chǔ)上,使用動態(tài)SQL,將表名和字段名稱傳入,從而達到靈活的目的。createorreplacefunctionstr_list2(key_nameinvarchar2,keyinvarchar

30、2,conameinvarchar2,tnameinvarchar2)returnvarchar2astypercisrefcursor;strvarchar2(4

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。