oracle函式wm concat行轉列

2021-07-09 11:04:02 字數 1754 閱讀 6555

資料庫中的兩張表:教師表(teacher)、教師所教科目表(teacher_km),現在要查詢教師資訊列表,把教師的科目資訊以語文、數學這種形式展示,也就是說需要將多條科目資訊取到名稱放到教師的一條記錄中。

teacher id

jsmc

csny

ff8080815233e5e0015233eb700c0001

魯慶賀20160112

402889e2523886da0152388b61b20002

烏啦啦20160112

teacher_km id

teid

kmmc

402889e2523b513701523b5e4e950006

402889e2523886da0152388b61b20002

英語402889e2523b513701523b8a8e7b0009

ff8080815233e5e0015233eb700c0001

幾何402889e2523b513701523b8a8e7c000a

ff8080815233e5e0015233eb700c0001法語

對於這個資料的處理,我有兩個想法,乙個是在後台做處理,乙個是在資料庫做處理

通過乙個簡單sql查詢到教師資訊的teacherlist,然後遍歷teacherlist,根據教師id查詢教師科目列表teacherkmlist,遍歷教師科目列表teacherkmlist,把教師科目的科目名稱處理成乙個字串存入教師資訊teacherlist,傳到前台展示。

這個方法用到了雙層的迴圈,多次查詢,多次對資料庫的查詢以及對資料的遍歷都會使得這個方式效率很低。

select t . id,

t.jsmc,

t.csny,

(to_char(sysdate, 'yyyy') - (substr(trim(to_char(t.csny)), 0, 4)) + 1) jsnl,

replace(t_km.kmmc, ',', '、') kmmc

from teacher t,

(select wm_concat(kmmc) kmmc, teid from teacher_km group by teid) t_km

where t_km.teid = t . id(+);

select t . id,

t.jsmc,

t.csny,

(to_char(sysdate, 'yyyy') - (substr(trim(to_char(t.csny)), 0, 4)) + 1) jsnl,

"replace"((select wm_concat(kmmc) kmmc

from teacher_km

where teid = t . id

group by teid),

',',

'、') kmmc

from teacher t

查詢結果

idjsmc

csny

jsnl

kmmc

ff8080815233e5e0015233eb700c0001

魯慶賀20160112

1幾何、法語

402889e2523886da0152388b61b20002

烏啦啦201601121英語

Oracle合併多列到一行wm concat

oracle合併多列到一行wm concat oracle在group by後合併表的某一列,以逗號隔開 或者合併整個表中的一列 www.2cto.com 函式為wm concat 用法如下 把表中一列合併成一行 select wm concat songid from album song 把結果...

Oracle合併多列到一行 wm concat

oracle在group by後合併表的某一列,以逗號隔開 或者合併整個表中的一列 函式為wm concat 用法如下 把表中一列合併成一行 select wm concat songid from album song 把結果裡的逗號替換成 select replace wm concat son...

oracle函式 轉換函式

1 asciistr str 說明 將任意字符集的字串轉換為當前資料庫例項對應的ascii字串。select asciistr 中華民族 from dual 備註 和該函式相似的有ascii,它是取得字串第乙個字元的ascii碼,後面的字元不管 chr是將ascii碼轉換為對應的字元。2 cast ...