Я создаю приложение для моего экзамена semestre, которое состоится через 20 дней. Мое приложение должно помочь учителям более легко построить наш факультетский график.Tough Sql Server Join Query
Я работаю с подходом базы данных (Sql Server 2008 и Delphi XE2). У меня есть несколько таблиц, описывающих структуру студенческих образований. Поэтому у меня есть Years
, Series
, Specializations
, Groups
и SemiGroups
. Как и в изображении Years
содержит Series
, Series
содержат Specializations
, Specializations
содержит Groups
и Groups
может содержать или не SemiGroups
. У меня также есть таблицы с Courses
, Teachers
, ClassRooms
, Days
и HourlyIntervals
.
Есть несколько условий:
Учитель может взять курс с одним или несколькими специализаций, а также с одним или несколькими группами, или с одним или несколькими полугруппами.
Второе условие состоит в том, что курсы имеют 3-х типов:. TeachingCourse, семинария, Лаборатория (только два из трех возможных для каждого CourseName) (хранится в столбце Scheduler.CourseType полукокса (3))
третьи: Курсы могут быть во всех неделях семестра, или в oddweek чисел, или в неделях числа Dividable на 2. (хранится в столбце Scheduler.Week полукокса (3))
Я сохраняя корреляции в SchedulerTable.
Так что, если группа имеет курс с определенным учителем я представлю только соответствующие идентификаторы.
Я построил почти все формы ввода данных, и теперь я нахожусь в части отчетности приложения. Я использую службы отчетов из MSSQL 2008. Я хочу перечислить планировщик, который будет включать все корреляции для определенной специализации (в которую входят группы и/или полугруппы). Мне удалось показать все корреляции для групп, принадлежащих к этим определенным специализациям, но я не могу показать все курсы специализации и полугрупп.
Это запрос, который возвращает мне корреляции групп из определенной специализации.
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
).
This is a sample report (PDF-файл), который я хотел бы получить:
Редактировать Причина: Лучше объяснить вопроса
Я удалил тег Delphi XE2, потому что этот вопрос не имеет ничего общего с Delphi; это вопрос SQL Server. –
Не уверен, что я получаю вам полугруппы по специализации, кажется простым шагом, если вы сделали группы по специализации. Можете ли вы поставить запрос, который вы сделали в вопросе? –
@ Тони: Я хочу поблагодарить вас за интерес к моему вопросу; я отредактировал его и поместил код для моего запроса. –