查找ID匹配但其他值不是

时间:2018-06-11 17:57:18

标签: sql sql-server tsql

我工作的教育部门想要从他们的在线奖学金申请中提取一些报告,但在我拉它们之前,我需要清理数据。他们需要的一件事是任何改变学位的学生的名单。目前在包含我所拥有的学位信息的表格中:

SchoolYearID,StudentID,InstID,Degree,Major,Minor,IsCurrent,OtherSchool,OtherSchoolHours,DateCreated和InstStudentID。

如何构建此应用程序,SchoolYearID是主键,学生ID在注册时分配给学生,InstID是给予大学的ID。在应用程序本身,学生可以选择他们的硕士学位计划,但在下一页选择他们是新生。我不可避免地会将此更改为有条件的,但现在只有很多学生将错误的学位计划放下,所以我们需要进入并更改它们。

我无法弄清楚的是如何选择学生个人ID以及学位计划,但只显示学位从一学年到另一学年的学生。

编辑: 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

匹配studentID(如果可能,InstID也匹配),但Degree字段不匹配。

2 个答案:

答案 0 :(得分:0)

这是经典的年度分析:

我假设每个学生每年都有一条记录。您必须修改才能获得要比较的记录。

localStorage['token_time'] = ''+myDate.getTime();
// And to restore it :
var myDate = new Date(parseInt(localStorage['token_time'], 10));

答案 1 :(得分:0)

要了解哪些学生拥有多个学位,请使用existsmaxmin一起选择一个选项:

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列。