Меня попросили создать запрос, который запускает проверки качества данных для определенного теста состояния.
У меня есть следующий запрос, который создает переменную с именем «Флаг» для выявления случаев, когда существуют проблемы. Основной запрос в действительности находится в подзапросе, и я отфильтровываю все записи, в которых нет флага, выбирая только те случаи, где значение «Флаг» имеет значение.
Я бы хотел иметь CASE WHEN для случаи, когда есть повторяющиеся тесты. У нас есть несколько дубликатов, в которых для одного и того же идентификатора студента (test.studentID, studenttestscore.studentID, student.ID) у студента будет та же дата теста для того же экзамена.
Дата теста, что и вы можно увидеть, это STUDENTTEST.TEST_DATE. Экзамены могут быть идентифицированы либо STUDENTTEST.ID или TEST.NAME. Может быть проще найти записи, в которых STUDENTTEST.test_date и STUDENTTEST.ID одинаковы для STUDENTTEST.studentID. Но как только вы получите этот счет, его нужно будет добавить к подзапросу, чтобы мы могли связать с ним имя студента.
with query as (select STUDENTS.STUDENT_NUMBER as "Student ID", Students.Lastfirst as "Student Name",
STUDENTS.GRADE_LEVEL as "Current Grade Level",
TEST.NAME as "Test Name",
STUDENTTEST.GRADE_LEVEL as "Grade level at time of exam",
STUDENTTEST.TEST_DATE as TEST_DATE,
STUDENTTESTSCORE.NUMSCORE as Score, STUDENTTESTSCORE.PERCENTSCORE as PCTScore,
S_NY_STU_X.DATEOFENTRYGRade9 as Cohort,
CASE
WHEN STUDENTTEST.GRADE_LEVEL <9 or STUDENTTEST.GRADE_LEVEL>12 then 'Invalid Grade Level'
WHEN STUDENTTESTSCORE.NUMSCORE != STUDENTTESTSCORE.PERCENTSCORE then 'Mismatch between number and percent score'
WHEN TEST.NAME like '% - T%' then 'Transitional Global no longer administered'
WHEN STUDENTTEST.TEST_DATE>CURRENT_DATE THEN 'Test date invalid'
WHEN STUDENTTESTSCORE.NUMSCORE <0 THEN 'Test score out of range'
WHEN STUDENTTESTSCORE.NUMSCORE <0 THEN 'Test score out of range'
WHEN STUDENTTESTSCORE.NUMSCORE >100 THEN 'Test score out of range'
WHEN STUDENTTESTSCORE.PERCENTSCORE > 100 THEN 'Test score out of range'
END AS Flag
from STUDENTS STUDENTS,
STUDENTTEST STUDENTTEST,
STUDENTTESTSCORE STUDENTTESTSCORE,
TEST TEST,
TESTSCORE TESTSCORE,
S_NY_STU_X S_NY_STU_X
where
Test.Name like 'Regents%' and
STUDENTTESTSCORE.TESTSCOREID=TESTSCORE.ID
and STUDENTTESTSCORE.STUDENTTESTID=STUDENTTEST.ID
and STUDENTTESTSCORE.STUDENTID=STUDENTTEST.STUDENTID
and STUDENTS.ID=STUDENTTEST.STUDENTID
and STUDENTS.ID=STUDENTTESTSCORE.STUDENTID
and STUDENTTEST.TESTID=TEST.ID
and S_NY_STU_X.STUDENTSDCID=STUDENTS.DCID)
select * from query where flag is not null
Большое вам спасибо !!