Поиск записей, где идентификатор совпадает, но другое значение не совпадает - PullRequest
0 голосов
/ 11 июня 2018

Департамент образования на моей работе хочет получить некоторые отчеты из их онлайн-заявки на стипендию, но прежде чем я смогу их получить, мне нужно очистить данные.Одна вещь, в которой они нуждаются, это список любого студента, который изменил степени.В настоящее время в таблице, которая содержит информацию о степени, у меня есть:

SchoolYearID, StudentID, InstID, Степень, Major, Minor, IsCurrent, OtherSchool, OtherSchoolHours, DateCreated и InstStudentID.

Как это приложениебыл создан, SchoolYearID является первичным ключом, идентификатор студента присваивается студенту при регистрации, InstID - это идентификатор университета.В самом приложении студент может выбрать, что он собирается получить план получения степени магистра, но затем на следующей странице выбрать, что он первокурсник.Неизбежно я изменю это на условное, но на данный момент есть много студентов, которые записали неправильный план на получение степени, поэтому нам нужно пойти и изменить их.

То, что я могу 'Выясните, как выбрать индивидуальные студенческие идентификаторы и план обучения, но покажите ТОЛЬКО тех студентов, чья степень изменилась с одного учебного года на другой.

Редактировать: SchoolYearID - это просто число, назначаемое каждому приложению по мере его создания, оно не имеет никакого отношения к календарному году.Новый SchoolYearID генерируется для каждого нового приложения, и учащиеся могут подать заявку на 3 разных семестра (весна, лето, осень), чтобы у одного учащегося было 3 разных SchoolYearID из одного и того же календарного года.

Так что

    SELECT *
    FROM CpnServicePortal.dbo.SchoolEnrollment

вернет результат, подобный

    SchoolYearID  StudentID  InstID  Degree  DegreeOther ...
    55            12         3232    M.B.A   NULL
    56            13         3235    Other   NULL
    60            20         3426    A.S.    NULL

И я пытаюсь придумать

    SchoolYearID  StudentID  InstID  Degree  DegreeOther ...
    55            12         3232    M.B.A   NULL
    123           12         3232    A.S.    NULL
    60            20         3426    A.S.    NULL
    728           20         3426    B.S.    NULL

Где идентификатор студента совпадает (и, если возможно, совпадает и InstID), но поля степени не совпадают.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Чтобы выяснить, какие студенты имели более одной степени, вот один вариант, используя exists с max и min:

select studentid, degree
from SchoolEnrollment s
where exists (
    select 1
    from SchoolEnrollment s2
    where s.studentid = s2.studentid
    group by studentid
    having max(degree) != min(degree)
)

Я не уверен, как вы определяете другой годхотя, поскольку я не вижу столбец yearid.

0 голосов
/ 11 июня 2018

это классический годовой анализ:

Я предполагаю, что у каждого студента есть одна запись в год.Вы должны изменить, чтобы получить записи, которые вы хотите сравнить.

declare @CY int = 2018;

;with lastYear as
(
   select *
   from [Table]
   where SchoolYearID=@cy-1
)

select cy.*
from [table] cy
    join lastYear on lastYear.StudentID = cy.StudentID
where schoolYearID=@CY
    and lastYear.Degree <> cy.Degree
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...