首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

追加20分,一共120分,求解,已修改数据库结构,大大们请进.解决思路

2012-01-22 
追加20分,一共120分,求解,已修改数据库结构,大大们请进..原贴地址http://community.csdn.net/Expert/topic

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

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

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

clName             Week             Prak       thName     clRoom         subName
05初教理1班11教师A阶梯教室(南)毛泽东思想
05初教理1班12教师A阶梯教室(南)毛泽东思想
05初教理1班27教师B逸夫楼408   初等数论
05初教理1班41教师B逸夫楼408                   初等数论
05初教理1班42教师C逸夫楼408                   初等数论
05初教理1班21教师C逸夫楼408                 数学方法论
05初教理1班22教师D逸夫楼408                 数学方法论
05初教理1班15教师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,prak

go
--删除测试环境
drop table #tb
go


/*--测试结果
节次 周一 周二 周三 周四 周五 老师
----------- ----------------------------------------------- ----------------------------------------------- ----------------------------------------------- ----------------------------------------------- ----------------------------------------------- ---------------
1 05初教理1班毛泽东思想(阶梯教室(南)) NULL NULL NULL NULL 教师A
2 05初教理1班毛泽东思想(阶梯教室(南)) 05初教理1班毛泽东思想(阶梯教室(南)) NULL NULL NULL 教师A

(2 row(s) affected)
*/

热点排行