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

求一SQL语句,有关课程表 ..续分
现有表结构 课程表{课序号,课程编号,班级编号,教师编号,教室编号,上课时间}上课时间为0~35中的整数,来表示一周中的某个时段(如上午1、2节为0...)。 
想得到的表中想把上课时间按周分开存放,增加周一、周二、...周日七个字段。怎样把上课时间存入其中,思路和算法都有就是不知道怎么在SQL中具体实现。 
由:

------解决方案--------------------
给点操作数据三!
------解决方案--------------------
[code=SQL][/code]
--上面的上课时间 / 7=0的情况没考虑
create table 课程表 (课序号 varchar(7),课程编号 varchar(4),班级编号 varchar(9),教师编号 varchar(5),教室编号 varchar(4),上课时间 int)
insert into 课程表
select '2007001','1001','200521301','20120','1302',1 union all
select '2007001','1001','200521301','20120','1302',5 union all
select '2007001','1001','200521301','20120','1302',15 union all
select '2007001','1002','200521301','20120','1302',18 union all
select '2007001','1002','200521301','20120','1302',30 union all
select '2007001','1002','200521301','20120','1302',35 

create table 上课时间(上课时间 int,周 varchar(4),课 varchar(6)) 

--楼主的上课时间的规律是什么?下面建的表数据不对,楼主可以自己输入对应的值
declare @i int
set @i=0
while @i<36
begin
insert into 上课时间
select @i,'周'+cast(@i/7+1 as char(1)),cast(@i%5+1 as char(1))+'-'+cast(@i%5+2 as char(1))
set @i = @i + 1 
end

--select * from 上课时间

declare @sql varchar(8000)

set @sql = 'select 课序号, 课程编号, a.上课时间,教师编号, 教室编号, 班级编号 '
select @sql = @sql + ' , (case 周 when ''' + 周 + ''' then 课 end) [' + 周 + ']'
from (select distinct 周 from 上课时间) as a
set @sql = @sql + ' from 课程表 a inner join 上课时间 b on a.上课时间=b.上课时间'

exec(@sql)

/*
课序号 课程编号 上课时间 教师编号 教室编号 班级编号 周1 周2 周3 周4 周5 周6
------- ---- ----------- ----- ---- --------- ------ ------ ------ ------ ------ ------ 
2007001 1001 1 20120 1302 200521301 2-3 NULL NULL NULL NULL NULL
2007001 1001 5 20120 1302 200521301 1-2 NULL NULL NULL NULL NULL
2007001 1001 15 20120 1302 200521301 NULL NULL 1-2 NULL NULL NULL
2007001 1002 18 20120 1302 200521301 NULL NULL 4-5 NULL NULL NULL
2007001 1002 30 20120 1302 200521301 NULL NULL NULL NULL 1-2 NULL
2007001 1002 35 20120 1302 200521301 NULL NULL NULL NULL NULL 1-2
*/

------解决方案--------------------
0-35这35个数如何对应周一至周日的课程?
0 周一 1-2
7 周二 5-6

其他的呢?