我正在为我的semestre考试建立申请,该申请将在20天内完成。我的应用程序应该帮助教师更轻松地建立我们的教师时间表。
我正在使用数据库方法(Sql Server 2008和Delphi XE2)。我有一些描述学生编队结构的表格。我有Years
,Series
,Specializations
,Groups
和SemiGroups
。与图片Years
包含Series
一样,Series
包含Specializations
,Specializations
包含Groups
,Groups
可能包含SemiGroups
{1}}。我还有Courses
,Teachers
,ClassRooms
,Days
和HourlyIntervals
的表格。
有几个条件:
教师可以选修一门或多门专业课程,或与一个或多个团体合作,或与一个或多个半群合作。
第二个条件是课程有3种类型:TeachingCourse,Seminary,Laboratory(每个CourseName只有两个可能的两个)。(存储在Scheduler.CourseType char(3)列中)
第三个:课程可以保存在一个学期的所有周,也可以保持在奇数周数,或者可以保存在2周的数字中。(存储在Scheduler.Week char(3)列中)
所以我将相关性存储在SchedulerTable中。
因此,如果某个小组有某个老师的课程,我只会介绍相应的ID。
我构建了几乎所有引入表单的数据,现在我处于应用程序的Reporting部分。我正在使用MSSQL 2008中的Report Services。 我想列出一个调度程序,它将包含某个Specialization(包括Groups和/或Semigroups)的所有相关性。我已设法显示属于某些专业化的群组的所有相关性,但我无法显示专业化和半群课程。
这是从特定专业化返回组关联的查询。
SELECT Days.DayName, HourlyIntervals.HourlyIntervalName, Scheduler.Week, Scheduler.CourseType, Courses.CourseName, ClassRooms.ClassRoomName, Teachers.TeacherName,Specializations.SpecName, Groups.GroupsName
FROM Scheduler INNER JOIN
Groups ON Scheduler.GroupID = Groups.GroupID INNER JOIN
Days ON Scheduler.DayID = Days.DayID INNER JOIN
HourlyIntervals ON Scheduler.HourlyIntervalID = HourlyIntervals.HourlyIntervalID INNER JOIN
Teachers ON Scheduler.TeacherID = Teachers.TeacherID INNER JOIN
Courses ON Scheduler.CourseID = Courses.CourseID INNER JOIN
ClassRooms ON Scheduler.ClassRoomID = ClassRooms.ClassRoomID INNER JOIN
Specializations ON Groups.IDSpec = Specializations.IDSpec
WHERE (Specializations.ID = @SpecID)
ORDER BY Days.DayID, HourlyIntervals.HourlyIntervalID
但我希望它能为某些专业化返回SemiGroups,Groups和Specialization的核心关系。我尝试使用这一个Scheduler.SemiGroupID = Semigroups.SemigroupID添加连接,但查询返回0结果。我不知道它是否可以按照我想要的方式完成,但我会感谢所有给我一个想法的人。或者我应该为我的关联表(SchedulerTable
)使用其他结构。
This is a sample report(PDF文件):
编辑原因:更好地解释问题
答案 0 :(得分:0)
那为什么这不是解决方案?
SELECT Days.DayName, HourlyIntervals.HourlyIntervalName, Scheduler.Week, Scheduler.CourseType, Courses.CourseName, ClassRooms.ClassRoomName, Teachers.TeacherName,Specializations.SpecName, SemiGroups.GroupsName
FROM Scheduler
INNER JOIN SemiGroups On Scheduler.SemiGroupId = SemiGroups.SemiGroupId
INNER JOIN Groups ON SemiGroups.GroupID = SemiGroups.Groups
INNER JOIN Days ON Scheduler.DayID = Days.DayID
INNER JOIN HourlyIntervals ON Scheduler.HourlyIntervalID = HourlyIntervals.HourlyIntervalID
INNER JOIN Teachers ON Scheduler.TeacherID = Teachers.TeacherID
INNER JOIN Courses ON Scheduler.CourseID = Courses.CourseID
INNER JOIN ClassRooms ON Scheduler.ClassRoomID = ClassRooms.ClassRoomID
INNER JOIN Specializations ON Groups.IDSpec = Specializations.IDSpec
WHERE (Specializations.ID = @SpecID)
ORDER BY Days.DayID, HourlyIntervals.HourlyIntervalID
虽然我会承认关于Scheduleles中的GroupID是否是该行中SemiGroupID的GroupID的问题。看起来这个位没有标准化。