У меня есть запрос с подзапросами в инструкции where, который работает нормально, но мне нужно улучшить его, но я не уверен в лучшем способе этого.Запрос с использованием подзапросов, в котором оператор
В основном я получаю последние лет результатов для студентов в это лет классов. Код ниже отлично работает для classcode '10DRADRA1', но есть еще много классов, и я хочу, чтобы запрос повторялся через все классы для семестра 2017 года. Мне нужно, чтобы класс кода включался как одно из полей вывода. Таким образом, запрос начнется с первого класса и даст все результаты для этого класса, а затем сделает то же самое для следующего класса в подзапросе. Я не уверен, как включить код класса в оператор select рядом со всеми результатами предыдущего года.
Обратите внимание, что в этом году учащиеся могут выполнять ряд классов, поэтому может быть некоторое повторение результатов за предыдущий год. Каждый класс, который они делают в этом году, должен включать имя учащегося и его результаты за предыдущий год. Я жестко запрограммировал «10DRADRA1» только для того, чтобы заставить все работать, если я его удалю, он предоставляет всех учеников в школе только один раз, в то время как я хочу, чтобы каждый класс был один раз и те же результаты для каждого класса, в котором они находятся.
Также не то, что vStudentReportsSemesterResults - это представление, которое содержит все результаты, StudentClasses - это таблица, в которой хранятся коды классов, которые выполняет студент, а SubjectClasses - таблица, содержащая коды для всех классов в школе.
Может ли кто-нибудь посоветовать лучший способ сделать это? Вот мой текущий код.
SELECT vStudentReportsSemesterResults.StudentID,
vStudentReportsSemesterResults.AssessResultsResult,
vStudentReportsSemesterResults.AssessAreaHdgAbbrev2,
vStudentReportsSemesterResults.FileSemester,
vStudentReportsSemesterResults.FileYear,
vStudentReportsSemesterResults.ClassLearningAreaCode,
vStudentReportsSemesterResults.AssessmentCode,
vStudentReportsSemesterResults.StudentNameInternal
FROM vStudentReportsSemesterResults
WHERE vStudentReportsSemesterResults.StudentID in
(
select StudentClasses.ID from StudentClasses
where StudentClasses.filesemester = 1 and
StudentClasses.fileyear = 2017 and
StudentClasses.classcode in
(
select SubjectClasses.ClassCode from SubjectClasses
where SubjectClasses.FileYear = 2017 and
SubjectClasses.FileSemester = 1 and
SubjectClasses.FileType = 'A' and
SubjectClasses.ClassCampus = 'S' and
SubjectClasses.ClassCode like '10DRADRA1'
)
)
and (vStudentReportsSemesterResults.ClassLearningAreaCode = 'ENG' OR
vStudentReportsSemesterResults.ClassLearningAreaCode = 'MAT' OR
vStudentReportsSemesterResults.ClassLearningAreaCode = 'SCI') AND
(vStudentReportsSemesterResults.AssessAreaHdgAbbrev2 = 'Grade' OR
vStudentReportsSemesterResults.AssessAreaHdgAbbrev2 = 'Level') AND
(vStudentReportsSemesterResults.AssessResultsResult <> '') AND
(vStudentReportsSemesterResults.FileYear = 2016) AND
(vStudentReportsSemesterResults.FileSemester = 4)
Вы, вероятно, может сделать присоединяется вместо этого, который, по крайней мере некоторые СУБД оптимизировать лучше. – jarlh
Можете ли вы предоставить некоторые данные образца и желаемый результат? –
'StudentClasses.ID' не является идентификатором записи StudentClasses, а для ученика? Или это опечатка? –