2012-08-08 46 views
0
SELECT * FROM ( 
select student_id, class_id, 
     sum(number*(1-abs(sign(subject-1)))) as sub1, 
     sum(number*(1-abs(sign(subject-2)))) as sub2, 
     sum(number*(1-abs(sign(subject-3)))) as sub3, 
     sum(number*(1-abs(sign(subject-4)))) as sub4, 
     sum(number*(1-abs(sign(subject-5)))) as sub5, 
     sum(number*(1-abs(sign(subject-6)))) as sub6 
from result GROUP BY student_id,class_id) m 
where class_id = '7' 

其查询正常工作。但是,如果主题值为空,那么所有学生记录都不会显示在该主题中。 我需要更多的发烧。Mysql数据透视表与where子句和总和值

+0

垂直或水平的任何方法?你想在每一行中总结sub1,2,... 6,或者你想总结sub1,sub2的列... – Hawili 2012-08-08 04:42:48

回答

2

我不知道是否有使用MySQL的直接,但我可以建议你使用PHP

$sql = mysql_query("SELECT m.* FROM ( 
select student_id, class_id, 
     sum(number*(1-abs(sign(subject-1)))) as sub1, 
     sum(number*(1-abs(sign(subject-2)))) as sub2, 
     sum(number*(1-abs(sign(subject-3)))) as sub3, 
     sum(number*(1-abs(sign(subject-4)))) as sub4, 
     sum(number*(1-abs(sign(subject-5)))) as sub5, 
     sum(number*(1-abs(sign(subject-6)))) as sub6 
from result GROUP BY student_id,class_id) m 
where m.class_id = '7'"); 

$row = mysql_fetch_array($sql); 
$sum = 0; 
for($i = 1; $i < count($row); $i++) { 
    $sum += isset($row['sub' . $i]) ? $row['sub' . $i] : 0; 
} 
+0

感谢回复,但是我怎样才能动态地计算动态m.sub1 + m.sub2 ??? Plz回答 – Zia 2012-08-08 04:47:32

+0

我修改了我的答案。我希望这将是你所需要的 – 2012-08-08 04:54:37