我正在为我的semestre考试建立一个应用程序,将在20天内进行。我的应用程序应该帮助教师更轻松地构建我们的教师时间表。艰难的SQL服务器加入查询
我正在使用数据库方法(Sql Server 2008和Delphi XE2)。我有几张描述学生编队结构的表格。所以我有Years
,Series
,Specializations
,Groups
和SemiGroups
。像在图中Years
包含Series
, Series
包含Specializations
, Specializations
, 和Groups
可能包含或不包含SemiGroups
。我也有Courses
,Teachers
,ClassRooms
,Days
和HourlyIntervals
的表格。
有几个条件:
教师可以参加课程与一个或多个专业化,或与一个或多个组,或者与一个或多个半群。
的第二个条件是,课程3种类型的:TeachingCourse,学院,实验室(从三种可能的对每个CourseName只有两个)(存储在列Scheduler.CourseType炭(3))
第三个:课程可以保持在一个学期的所有周,或在oddweek号码,或在周数可分割由2(存储在列Scheduler.Week炭(3))
所以我将相关性存储在SchedulerTable中。
所以,如果一个集团有一定的教师,我将只推出相应的ID的过程。
我构建了几乎所有的数据介绍表单,现在我在报表部分的应用程序。我正在使用MSSQL 2008中的报告服务。 我想列出一个调度程序,该调度程序将包含特定专业化(包括组和/或半群)的所有相关性。我已经设法显示属于某些专业领域的小组的所有相关性,但我无法设法显示专业化和半群体课程。
这是一个查询,它返回来自某个Specialization的组关联。
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文件),我想获得:
编辑原因:更好的解释这个问题
我删除了Delphi XE2标签,因为这个问题与Delphi完全无关;这完全是一个SQL Server问题。 –
不确定我是否让你获得半群每个专业化看起来是一个简单的步骤,因为你已经完成了每个专业的群体。你可以把你所做的查询放在问题中吗? –
@Tony:我想感谢你对我的问题的兴趣;我编辑它,并把我的查询代码。 –