艰难的Sql Server加入查询

时间:2012-06-02 21:11:58

标签: sql-server sql-server-2008 reporting-services

我正在为我的semestre考试建立申请,该申请将在20天内完成。我的应用程序应该帮助教师更轻松地建立我们的教师时间表。

我正在使用数据库方法(Sql Server 2008和Delphi XE2)。我有一些描述学生编队结构的表格。我有YearsSeriesSpecializationsGroupsSemiGroups。与图片Years包含Series一样,Series包含SpecializationsSpecializations包含GroupsGroups可能包含SemiGroups {1}}。我还有CoursesTeachersClassRoomsDaysHourlyIntervals的表格。

有几个条件:

  1. 教师可以选修一门或多门专业课程,或与一个或多个团体合作,或与一个或多个半群合作。

  2. 第二个条件是课程有3种类型:TeachingCourse,Seminary,Laboratory(每个CourseName只有两个可能的两个)。(存储在Scheduler.CourseType char(3)列中)

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

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

    enter image description here

    因此,如果某个小组有某个老师的课程,我只会介绍相应的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文件):

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

1 个答案:

答案 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的问题。看起来这个位没有标准化。