0

20 日後に行われる学期試験のアプリケーションを作成しています。私のアプリは、教師が教員の時間割をより簡単に作成できるように支援する必要があります。

データベースアプローチ(Sql Server 2008およびDelphi XE2)を使用しています。学生編成の構造を説明する表がいくつかあります。YearsSeriesSpecializationsGroupsおよびがありSemiGroupsます。画像のように、Years含むSeriesSeries含むSpecializationsSpecializations含むGroupsGroups含むまたは含まない可能性がありますSemiGroupsCoursesTeachersClassRoomsDaysおよびのテーブルもありHourlyIntervalsます。

いくつかの条件があります:

  1. 教師は、1 つまたは複数のスペシャライゼーション、または 1 つまたは複数のグループ、または 1 つまたは複数のセミグループを含むコースを受講できます。

  2. 2 つ目の条件は、コースが TeachingCourse、Seminary、Laboratory の 3 つのタイプであることです (CourseName ごとに 3 つのうち 2 つのみが可能です)。(Scheduler.CourseType char(3) 列に格納されます)

  3. 3 つ目: コースは、学期のすべての週、奇数週、または 2 で割り切れる週数で保持できます (Scheduler.Week char(3) 列に格納されます)。

そのため、相関関係を SchedulerTable に格納しています。

ここに画像の説明を入力

そのため、グループに特定の教師のコースがある場合、対応する ID のみを紹介します。

フォームを導入するほぼすべてのデータを作成し、現在はアプリケーションのレポート部分にいます。MSSQL 2008 の Report Services を使用しています。特定の 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

しかし、その特定の専門分野のセミグループ、グループ、および専門分野の相関関係を返したいと思っています。この 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 に答える