一個sql的行列轉置的例子

dawn009發表於2015-05-04
一個sql的行列轉置的例子
 
有這樣一個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
就是把幾個查詢集並起來。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1622249/,如需轉載,請註明出處,否則將追究法律責任。

相關文章