MySql查詢返回多條資料多列合併

2021-09-02 06:51:46 字數 2464 閱讀 6070

最近幫人做了乙個成績單列印的功能,需要在成績單上列印出成績劃分等級和具體的成績範圍,左思右想~~~在一條sql搞定和迴圈多條記錄拼接之間徘徊,由於時間匆忙,還是選擇了簡單的查詢、迴圈、拼接。但是還是不甘心,趕緊那樣做太low。於是乎,事後繼續研究。

資料庫中資料存格式如下:

成績等級:

等級(point_grade)對應的資料字典:

最終要實現的效果:

語法:group_concat([distinct]要連線的字段  [order by 排序字段 asc/desc] [separator 『分隔符』])-----à預設使用逗號分隔

支援多個列拼接在一行展示。

語法:concat_ws(separator,str1,str2,……)

將多個列使用指定字串進行拼接成乙個字串返回。

與concat(str1,str2,str3,……)的區別,當concat函式中返回的任意乙個欄位的值為null時,則整個返回結果就為null,而當concat_ws函式中任意乙個欄位的值為null時,則會自動忽略此列的值進行拼接;當concat函式中返回的任意乙個欄位的值為』   』時,則返回結果會將空白項拼接在字串中返回。

實現過程:

(1)將所有的分數範圍拼接在一起

select

concat_ws('-',m.point_min, m.point_max) as  scorestr

from   et_exam_grade m

where  m.del_flag = '0'

and m.exam_id = '1'  order by m.point_min

效果如下:

將成績範圍和「分」拼接在一起,並且轉為一行:

select

concat_ws(' ',

group_concat(a.scorestr,'分' separator ',')

) as res

from (

select concat_ws('-', m.point_min,m.point_max) as scorestr,

m.id as aid,m.point_grade as gradea

from et_exam_grade m

where m.del_flag = '0'

and m.exam_id = '1'

order by m.point_min

) a, (

select n.id as bid, n.point_grade as gradeb

from et_exam_grade n

where n.del_flag = '0'

and n.exam_id = '1'

order by n.point_min

) b where a.aid = b.bid

效果如下:

將資料字典值和成績等級對應:

select concat_ws(' ',group_concat(a.scorestr,c.label separator ',')) as res from (

select concat_ws('-',m.point_min,m.point_max) as scorestr,m.id as aid,m.point_grade as gradea

from et_exam_grade m where m.del_flag ='0' and

m.exam_id='1' order by m.point_min

)a,(select n.id as bid,n.point_grade as gradeb from et_exam_grade n where n.del_flag='0' and n.exam_id='1'

order by n.point_min)b,(select d.label label,d.`value` as dictval from sys_dict d where d.type='score_grade')c

where a.aid = b.bid and a.gradea = b.gradeb and b.gradeb = c.dictval

效果如下:

目的達成!!!注意第三步的時候去掉了『分』的拼接,這個無所謂啦!!!

有更好的實現方式的,歡迎分享!!!!

oracle游標(返回多條資料)分頁

create or replace package test mypackage1 as 宣告型別,並引用游標 type cursortype is ref cursor 宣告儲存過程,兩個輸入引數,乙個輸出引數,輸出游標型別資料 procedure prcgetglobaladdress pos1...

MySQL批量插入多條資料

mysql在插入大量資料 十萬級或者百萬級別 時效率會變得很差,所以需要採用以下方法來提高其插入效率。a 關閉自動提交,改為手動提交 connect.setautocommit false 插入資料完後最後再con.commit b 拆分資料,多執行緒入庫 c 一條插入語句插入多條資料 insert...

mysql 中實現多條資料同時更新

有時間我們需要對一張表進行批量資料的更新。首先我們想的是update 語句。比如對一張訂單表order info 多條資料更新,update order inifo set order code case order id when 1 then abc when 2 then bcd when 3...