有這樣乙個aaa表如下所示:
name score color
jim 10 red
jim 20 blue
jim 20 green
jim 1 black
glin 2 red
glin 33 blue
glin 21 green
glin 19 black
bob 22 red
bob 39 blue
bob 11 green
bob 11 black
要轉置成如下所示的bbb表
name red blue green black
jim 10 20 20 1
bob 22 39 11 11
glin 2 33 21 19
使用的sql如下:
select r.name ,r.s red,b.s blue,g.s green ,bk.s black
from( select name,sum(score)s from aaa where color='red' group by name ) r,
( select name,sum(score)s from aaa where color='blue' group by name ) b,
( select name,sum(score)s from aaa where color='green' group by name ) g,
( select name,sum(score)s from aaa where color='black' group by name ) bk
where r.name = b.name and b.name = g.name and g.name = bk.name
相當於group by之後把每個人的某一種顏色的分數統計成乙個資料集,再把這幾個響應的資料集做表連線拼起來。
如果反過來,指導bbb表,要返回成aaa表,sql的寫法是怎樣呢?
select name, red score,'red' color from bbb
union
select name, blue score,'blue' color from bbb
union
select name, green score,'green' color from bbb
union
select name, black score,'black' color from bbb
就是把幾個查詢集並起來。
MySQL乙個類行列轉置的顯示處理
首先,建立表return change 插入符合表字段型別屬性的資料,如上例子 直接語句 selectname,case cname when 語文 then score else end 語文 case cname when 數學 then score else end 數學 case cname...
乙個sql的例子
select dbo.userinfo.username,dbo.userinfo.usertruename,dbo.userinfo.useremail,dbo.userinfo.usermobile,dbo.userinfo.usertelephone,dbo.userinfo.usercar,...
SQL 行列轉置 常見面試題(一)
常見面試題如下 先來分析一下 第一步將course 裡面的課程轉換為列標題,常用 case when 就能解決。select 學號 max case when 課程號 0001 then 成績 end as 語文 max case when 課程號 0002 then 成績 end as 數學 ma...