日期:2014-05-18  浏览次数:20696 次

一个sql笔试题
教师号  星期号 是否有课
 1    2   有
 1    3   有
 2    1   有
 3    2   有`
 1    2   有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
 1       2   1 
 2   1   
 3       1
各星期下的数字表示:对应的教师在星期几已经排的课数



网上的答案是 :
select 教师号,sum(CASE 星期号 WHEN 1 THEN 1 ELSE 0 END) AS 星期号1,
    sum(CASE 星期号 WHEN 2 THEN 1 ELSE 0 END) AS 星期号2,
    sum(CASE 星期号 WHEN 3 THEN 1 ELSE 0 END) AS 星期号3
FROM 课程表 group by 教师号

但结果和题目要求不相符   没有课的是空白 上面的结果没有课的是0,  。。。
------解决方案--------------------
如果是用mysql 这个肯定是你想要的结果
SELECT 
aa.teacher_id,
IF(SUM(CASE aa.day_num WHEN 1 THEN 1 ELSE 0 END)=0,'',SUM(CASE aa.day_num WHEN 1 THEN 1 ELSE NULL END)) AS 星期1,
IF(SUM(CASE aa.day_num WHEN 2 THEN 1 ELSE 0 END)=0,'',SUM(CASE aa.day_num WHEN 2 THEN 1 ELSE NULL END)) AS 星期2,
IF(SUM(CASE aa.day_num WHEN 3 THEN 1 ELSE 0 END)=0,'',SUM(CASE aa.day_num WHEN 3 THEN 1 ELSE NULL END)) AS 星期3
FROM (
SELECT 
teacher_id,
day_num,
is_free
FROM test
WHERE is_free =1
) AS aa GROUP BY aa.teacher_id