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

追加20分,一共120分,求解,已修改数据库结构,大大们请进..
原贴地址

http://community.csdn.net/Expert/topic/5717/5717441.xml?temp=1.003665E-02

现在通过大家的建议,已修改数据库结构..-   -

clName             Week             Prak       thName     clRoom         subName
05初教理1班 1 1 教师A 阶梯教室(南) 毛泽东思想
05初教理1班 1 2 教师A 阶梯教室(南) 毛泽东思想
05初教理1班 2 7 教师B 逸夫楼408   初等数论
05初教理1班 4 1 教师B 逸夫楼408                   初等数论
05初教理1班 4 2 教师C 逸夫楼408                   初等数论
05初教理1班 2 1 教师C 逸夫楼408                 数学方法论
05初教理1班 2 2 教师D 逸夫楼408                 数学方法论
05初教理1班 1 5 教师E 逸夫楼408                 数学科学教学


clName是班级名称   Week是星期几,Prak是第几节,一共10节     thname是教师姓名,clRoom是教室名称,subName是课程名称。

现在要得到

比如要查教师A的教师课程表,那么就想得到这样的表
节次                         星期1                                     星期2                     星期3                   星期4                 星期5
第1节     05初教理1班毛泽东思想(阶梯教室(南))
第2节     中文1班毛泽东思想(阶梯教室(南))
第3节
第4节
第5节
第6节
第7节
第8节
第9节
第10节

------解决方案--------------------
如果改成那样的表结构可以这样写

--建立测试环境
create table #tb(clName varchar(15),Week int,Prak int,thName varchar(15),clRoom varchar(15),subName varchar(15))
insert #tb(clName,Week,Prak,thName,clRoom,subName)
select '05初教理1班 ', '1 ', '1 ', '教师A ', '阶梯教室(南) ', '毛泽东思想 ' union all
select '05初教理1班 ', '1 ', '2 ', '教师A ', '阶梯教室(南) ', '毛泽东思想 ' union all
select '05初教理1班 ', '2 ', '2 ', '教师A ', '阶梯教室(南) ', '毛泽东思想 ' union all
select '05初教理1班 ', '2 ', '7 ', '教师B ', '逸夫楼408 ', '初等数论 ' union all
select '05初教理1班 ', '4 ', '1 ', '教师B ', '逸夫楼408 ', '初等数论 ' union all
select '05初教理1班 ', '4 ', '2 ', '教师C ', '逸夫楼408 ', '初等数论 ' union all
select '05初教理1班 ', '2 ', '1 ', '教师C ', '逸夫楼408 ', '数学方法论 ' union all
select '05初教理1班 ', '2 ', '2 ', '教师D ', '逸夫楼408 ', '数学方法论 ' union all
select '05初教理1班 ', '1 ', '5 ', '教师E ', '逸夫楼408 ', '数学科学教学 '
go
--执行测试语句
select t.Prak as 节次
,max(case when week = 1 then t.clName+t.subName+ '( '+t.clRoom + ') ' end) as 周一
,max(case when week = 2 then t.clName+t.subName+ '( '+t.clRoom + ') ' end) as 周二
,max(case when week = 3 then t.clName+t.subName+ '( '+t.clRoom + ') ' end) as 周三
,max(case when week = 4 then t.clName+t.subName+ '( '+t.clRoom + ') ' end) as 周四
,max(case when week = 5 then t.clName+t.subName+ '( '+t.clRoom + ') ' end) as 周五
,t.thName as 老师
from #tb t
where thname = '教师A '
group by thname,prak
order by thname,pra