2016-09-20 84 views
0

我有一個數據庫,其中包含id,名稱,主題和totalMarks。每行都包含學生的ID,姓名,科目以及他們的總分數,這意味着每個學生有多行。這不是我的問題。我的問題是,學生有多個學科的總分數列出來...這意味着有兩個單獨的行,一個學生,每個學科一個。對我來說太糟糕了,我對數據格式的控制較少,因爲它是從沒有很多格式化選項的系統導出的。在列中使用列值作爲標題的另一列

下面是系統如何看起來像

id stdID  name subject  totalMarks 
1 BA53  Smith Maths   100% 
2 BA45  Emma  Maths   87% 
3 BA53  Smith English  98% 
4 BA45  Emma  English  78% 

我想行與同學生ID stdIDsubject使用subject列值作爲獲得的total marks標題合併成一排的例子理想情況下,最終結果看起來像這樣:

id stdID  name  Maths   English 
1 BA53  Smith 100%   98% 
2 BA45  Emma  87%    78% 

這可能使用PHP和/或MySQL?我不想找人編寫整個代碼或任何東西。我似乎無法想出一個辦法來實現它。我會很高興有任何方向/跡象表明這種方式。

一如既往,感謝您的時間和幫助。

回答

0

您可以使用一個內連接在同一個表

select a.stdID, a.name a.subject as Maths, b.subject as English 
from my_table as a 
inner join my_table as b on a.stdID = b.stdID 
where a.subject = 'Maths' 
and b.subject ='English'; 
0

通常,這被稱爲轉置行和列。一種方法是這樣的:

SELECT 
    id, 
    stdID, 
    name, 
    MAX(CASE WHEN subject = 'Maths' THEN totalMarks ELSE NULL END) AS Maths, 
    MAX(CASE WHEN subject = 'English' THEN totalMarks ELSE NULL END) AS English 
FROM tablename 
GROUP BY id,stdID,name 
; 

如果有大量的科目,使擴展查詢不合理,你可以使用動態SQL(可能不理想,除非你真的知道自己在做什麼),或者可以做它在PHP中通過初始化一個空的數據結構,然後在迭代期間適當地填充它,因爲遇到學生/主題對。

相關問題