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

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

ID:15508990

大?。?6.50 KB

頁(yè)數(shù):10頁(yè)

時(shí)間:2018-08-03

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

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

1、Oracle多行記錄合并連接聚合字符串的幾種方法怎么合并多行記錄的字符串,一直是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>desctest;NameTypeNullableDefaultComments------------------------------------------COUNTRYVARCHAR2(20)YCITYVARCHAR2(20)YSQL>select*fromtest;COU

2、NTRYCITY----------------------------------------中國(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)行分析(有一個(gè)評(píng)測(cè)標(biāo)準(zhǔn)最高★★★★★):1.被集合字段范圍小且固定型靈活性★性能★★★★難度★這種方法的原理在于你已經(jīng)知道CITY字段的值有幾種,且還不算太

3、多,如果太多這個(gè)SQL就會(huì)相當(dāng)?shù)拈L(zhǎng)。??蠢樱篠QL>selectt.country,2MAX(decode(t.city,'臺(tái)北',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))7f

22、romtesttGROUPBYt.country8/COUNTRYMAX(DECODE(T.CITY,'臺(tái)北',T.CIT--------------------------------------------------中國(guó)臺(tái)北,香港,上海,日本東京,大阪,大家一看,估計(jì)就明白了(如果不明白,好好補(bǔ)習(xí)MAXDECODE和分組)。這種方法無(wú)愧為最笨的方法,但是對(duì)某些應(yīng)用來(lái)說(shuō),最有效的方法也許就是它。2.固定表固定字段函數(shù)法靈活性★★性能★★★★難度★★此法必須預(yù)先知道是哪個(gè)表,也就是說(shuō)一個(gè)表就得寫一個(gè)函數(shù),不過(guò)方法1的一

23、個(gè)取值就要便捷多了。在大多數(shù)應(yīng)用中,也不會(huì)存在大量這種合并字符串的需求。廢話完畢,看下面:定義一個(gè)函數(shù)createorreplacefunctionstr_list(str_ininvarchar2)--分類字段returnvarchar2isstr_listvarchar2(4000)defaultnull;--連接后字符串strvarchar2(20)defaultnull;--連接符號(hào)beginforxin(selectTEST.CITYfromTESTwhereTEST.COUNTRY=str_in)loopst

24、r_list:=str_list

25、

26、str

27、

28、to_char(x.city);str:=',';endloop;returnstr_list;end;使用:SQL>selectDISTINCT(T.country),list_func1(t.country)fromtestt;COUNTRYLIST_FUNC1(T.COUNTRY)------------------------------------中國(guó)臺(tái)北,香港,上海日本東京,大阪SQL>selectt.country,str_list(t.country)from

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

30、rreplacefunctionstr_list2(key_nameinvarchar2,keyinvarchar2,conameinvarchar2,tnameinvarchar2)returnvarchar2astypercisrefcursor;strvarchar2(4000);sepvarchar2(2);

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

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

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