Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 艰难的Sql Server连接查询_Sql Server_Sql Server 2008_Reporting Services - Fatal编程技术网

Sql server 艰难的Sql Server连接查询

Sql server 艰难的Sql Server连接查询,sql-server,sql-server-2008,reporting-services,Sql Server,Sql Server 2008,Reporting Services,我正在为我的学期考试建立一个申请,该考试将在20天后举行。我的应用程序应该可以帮助老师们更容易地建立我们的教师时间表 我正在使用数据库方法Sql Server 2008和Delphi XE2。我有几个表格描述了学生的结构。所以我有年,系列,专业,群和半群。与图像中的年份包含系列一样,系列包含专门化,专门化包含组,组可能包含或不包含半组。我还有课程表、教师表、教室表、日和小时间隔表 有几个条件: 教师可以选择一个或多个专业,或一个或多个小组,或一个或多个半小组的课程 第二个条件是课程分为三种类型:

我正在为我的学期考试建立一个申请,该考试将在20天后举行。我的应用程序应该可以帮助老师们更容易地建立我们的教师时间表

我正在使用数据库方法Sql Server 2008和Delphi XE2。我有几个表格描述了学生的结构。所以我有年,系列,专业,群和半群。与图像中的年份包含系列一样,系列包含专门化,专门化包含组,组可能包含或不包含半组。我还有课程表、教师表、教室表、日和小时间隔表

有几个条件:

教师可以选择一个或多个专业,或一个或多个小组,或一个或多个半小组的课程

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

第三个:课程可以保存在一学期的所有周内,也可以保存在oddweek数字中,或者保存在可除以2的周数中。存储在列调度器中。Week char3

所以我将相关性存储在一个可调度表中

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

我构建了几乎所有的数据导入表单,现在我在应用程序的报告部分。我正在使用MSSQL 2008的报表服务。 我想列出一个调度器,它将包含某个特定专业化的所有关联,其中包括组和/或半组。我已经成功地展示了属于特定专业的群体的所有相关性,但我无法同时展示专业和半群体课程

这是一个查询,它从特定的专门化返回me组关联

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
但我想让它返回半群的相关关系,群和特定专业化的专业化。我尝试使用此调度器添加联接。SemiGroupID=Semigroups.SemiGroupID,但查询返回0个结果。我不知道是否能做到我想要的,但我会感谢任何给我一个想法的人。或者我应该为我的关联表SchedulerTable使用另一种结构

我希望获得的PDF文件:


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

为什么这不是解决方案

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

尽管我承认,对于日程表中的GroupID是否是那一行中半GroupID的GroupID,我皱起了眉头。看起来该位没有正常化。

我删除了Delphi XE2标记,因为这个问题与Delphi完全无关;严格说来,这是一个SQL Server问题。鉴于您已经完成了每个专业的分组,不确定我是否会为您提供每个专业的半组似乎是一个简单的步骤。你能把你的疑问写在问题里吗?@托尼:我想感谢你对我的问题感兴趣;我编辑了它并为我的查询输入了代码。@Tony-我已经完成了一个包含25条记录的测试计划表。5条记录带有SpecID,15条记录带有GroupID,另外5条记录带有SemiGroupID。所有这25条记录都属于某一专业。当我运行查询时,它只返回属于GroupID的记录。关于规范化,我不知道我错在哪里,因为一个专业属于一个系列,一个团体属于一个专业,一个半团体属于一个团体。请问,你能给我更具体的建议吗?@CristianVasuica,你能有一个没有半团体的团体吗?问题似乎是。在时间表中,你可以有一个群和半群,其中半群中的群是一个不同的群。是的,我可以有一个没有半群的群。我不确定我是否理解你的意思。我将向您展示我在Schedules表中输入记录的方式:让我们假设我有一个名为SpecInformatic的专业,这个专业有两个组。每组包含2个半群。当我想为信息学的Group1的Semigroup1设置时,我只在表中引入SemiGroup1ID。我不是在介绍Group1ID或specid。我做错了?我应该同时输入specid和Group1ID吗?这是一个错误的观点我只是被列名误导了。我不知道我是否遗漏了什么。在我看来,您需要合并三个查询,一个用于专门化,一个用于组,一个用于半组。