數據庫中的數據一般分行存儲,但是在取出的時候,可能要求變換格式顯示,比如行轉列、列轉行、單元格合併等操作。本示例爲說明行轉列。
原數據格式如下(student表):
ID | NAME | SUBJECT | SUB_SCORE |
1 | 小紅 | 數學 | 90 |
2 | 小紅 | 語文 | 91 |
3 | 小紅 | 英語 | 92 |
4 | 小明 | 數學 | 80 |
5 | 小明 | 語文 | 81 |
6 | 小明 | 英語 | 82 |
7 | 小華 | 數學 | 70 |
8 | 小華 | 語文 | 71 |
9 | 小華 | 英語 | 72 |
格式(一)
ID | NAME | subjects | scores |
1 | 小紅 | 數學,語文,英語 | 90,91,92 |
4 | 小明 | 數學,語文,英語 | 80,81,82 |
7 | 小華 | 數學,語文,英語 | 70,71,72 |
ID | NAME | subjects | scores |
1 | 小紅 | 數學|語文|英語 | 90|91|92 |
4 | 小明 | 數學|語文|英語 | 80|81|82 |
7 | 小華 | 數學|語文|英語 | 70|71|72 |
格式一:
group_concat默認的分隔符是“,”,代碼如下:
select id, name , group_concat(subject) as subjects , group_concat(sub_score) as scores
from student
group by name desc
執行結果爲:
注:當列是數字時,通過group_concat變成BLOB類型,需進行轉義,修正代碼如下:
select id , name , group_concat(subject) as subjects , group_concat(cast(sub_score as char)) as scores
from student
group by name desc
執行結果爲:
格式二:
方法一:數字類型的字段需要進行轉義
select id,name,group_concat(subject separator '|') as subjects,group_concat(cast(sub_score as char )separator '|') as scores
from student
group by name desc
方法二:
select id,name,group_concat(subject separator '|') as subjects,replace(group_concat(sub_score),',','|') as scores
from student
group by name desc
執行結果爲: