2012-07-31 71 views
0

我想將行轉換爲mySQL的列。MySQL視圖將行轉換爲列

我有一個表有四個領域

Excode SyID adno Mark 
IA1  1 2220 70 
IA1  1 2134 75 
IA1  3 2220 73 
IA1  3 2134 80 
IA2  1 2220 81 
IA2  1 2134 79 
IA2  3 2220 65 
IA2  3 2134 72 
..... 
..... 

的「SyID」和「adno」將保留在柱本身的「Excode」獨特價值的編號S應該是列增加爲如下

SyID adno IA1 IA2 ..... ...... ..... 
1 2220 70 81 ..... ...... ..... 
3 2220 73 65 ..... ...... ..... 
1 2134 75 79 ..... ...... ..... 
3 2134 80 72 ..... ...... ..... 
.. ...... ..... .... ..... ...... ..... 
.. ...... ..... .... ..... ...... ..... 

請指導我。感謝您。

+0

爲什麼你想這樣做嗎?我不確定有可能只使用MySQL。但是,在從表或視圖中檢索到所有值後,可能使用編程語言(也許是PHP?)。 – Jocelyn 2012-07-31 02:05:59

+0

有多少'IA?''Excode'值? – HeatfanJohn 2012-07-31 02:07:42

+0

我已經創建了一個表格來根據adno插入標記。現在我創建了adno的marsheet。使用PHP我認爲它會使用大量的服務器資源,因爲有很多記錄, – Bishu 2012-07-31 02:10:30

回答

3

也許最接近你將在MySQL中將一個非固定數量的行「PIVOT」到單行中的方法是使用GROUP_CONCAT()函數。這不正是讓你所有的Excode S的成單獨的列,而是作爲一個分隔的字符串:

SELECT SyID, 
     adno, 
     GROUP_CONCAT(CONCAT(Excode, ': ', Mark) SEPARATOR '/') AS ExcodeMarks 
FROM  tbl 
GROUP BY SyID, adno 

這會產生一種類似你想要什麼:

SyID | adno | ExcodeMarks 
---------------------------------------------- 
1  | 2220 | IA1: 70/IA2: 81 
3  | 2220 | IA1: 73/IA2: 65 
1  | 2134 | IA1: 75/IA2: 79 
3  | 2134 | IA1: 80/IA2: 72 
+0

感謝您的幫助。但我需要在一個單獨的專欄中列出所有標記,以便我必須找出每個課程,每個科目,學生分部等的封面。是否有任何選項可以創建此視圖的新視圖以獲取所需的列。 – Bishu 2012-07-31 16:08:04