0

我正在为我的学期考试建立一个申请,该考试将在 20 天内进行。我的应用程序应该可以帮助教师更轻松地制定我们的教师时间表。

我正在使用数据库方法(Sql Server 2008 和 Delphi XE2)。我有几张描述学生编队结构的表格。所以我有Years, Series,Specializations和. 就像图像中的包含、包含、包含和可能包含或不包含。我也有带有, ,和的表格。GroupsSemiGroupsYearsSeriesSeriesSpecializationsSpecializationsGroupsGroupsSemiGroupsCoursesTeachersClassRoomsDaysHourlyIntervals

有几个条件:

  1. 教师可以学习一门或多门专业课程,或一个或多个小组,或一个或多个半小组的课程。

  2. 第二个条件是课程有 3 种类型:教学课程、神学院、实验室(每个课程名称只有三种可能的两种)。(存储在 Scheduler.CourseType char(3) 列中)

  3. 第三个:课程可以保存在一个学期的所有周数,或以奇数周数,或可被2整除的周数。(存储在Scheduler.Week char(3)列中)

所以我将相关性存储在 SchedulerTable 中。

在此处输入图像描述

因此,如果一个小组有某位老师的课程,我将只介绍相应的 ID。

我构建了几乎所有的数据介绍表格,现在我在应用程序的报告部分。我正在使用 MSSQL 2008 中的 Report Services。我想列出一个调度程序,该调度程序将包括某个专业化的所有相关性(包括组和/或半组)。我已经设法展示了属于特定专业的组的所有相关性,但我无法展示专业和半组课程。

这是从某个专业化返回我组相关性的查询。

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

但我希望它返回特定专业化的半组、组和专业化的关联。我试图用这个 Scheduler.SemiGroupID=Semigroups.SemigroupID 添加一个连接,但查询返回 0 结果。我不知道它是否可以完成我想要的,但我会感谢任何给我指出想法的人。或者我应该为我的相关表 ( SchedulerTable) 使用另一种结构。

这是我想获得的示例报告(PDF 文件):

编辑原因:更好地解释问题

4

1 回答 1

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

尽管我承认对于 Schedules 中的 GroupID 是否是该行中 SemiGroupID 的 GroupID 感到皱眉。看起来那位没有标准化。

于 2012-06-03T11:47:11.233 回答