创建 Iif() 语句或查询以检查与 ID 匹配的多个行中的多个值

Create Iif() Statement or Query to check multiple values in multiples rows matched on ID

我正在管理一个学生数据库。每个学期,我们都会为学生注册 类,并在 table、[Registration Status Record] 中跟踪此进度。 table 中的每一行基本上包括:[Student ID][Semester][Registration Status][Notification Status].

示例数据:

我想要创建另一个查询或 Iif() 语句,它将 检查任何给定学生的所有行和 return 他们的 总体 注册状态 与学期无关。

如果使用 Iif() 语句,这里是我要寻找的一些标准:

就 Iif() 语句而言,我不知道从哪里开始。至于查询构建,我同样感到难过。我想我至少会为 100% 完成的学生做一个。以下是我根据找到的另一个答案 (https://dba.stackexchange.com/questions/1775/matching-single-column-against-multiple-values-without-self-joining-table-in-mys) 做出的微弱尝试。这个想法是这个查询应该显示所有完全完成的学生(100% 注册并通知所有学期):

SELECT [Registration Status Record].[Student ID], Count([Registration Status Record].[Registration Status]) AS [CountOfRegistration Status]
FROM [Registration Status Record]
WHERE ((([Registration Status Record].[Registration Status])="Complete") AND (([Registration Status Record].[Notification Status])="Notified"))
GROUP BY [Registration Status Record].[Student ID]
HAVING (((Count([Registration Status Record].[Registration Status]))>0));

我的期望是,例如,如果学生只有 Spring 2017 年的注册并且已 100% 完成,它会向他们显示。相反,如果他们在 2016 年秋季和 Spring 2017 年都有它并且 100% 完成,它也会向他们展示。但是,如果他们有两个学期的注册并且两个学期都没有完全完成,则不会显示。但确实如此!例如,returns 的一名学生在 2016 年秋季完成了 100%,但在 2017 年 Spring 只完成了部分(他们的注册已经完成,但他们还没有收到通知)。

我知道一定有办法做到这一点。我可以用英语或西班牙语表达我想要的东西,但不会 SQL。任何帮助表示赞赏......并对这个问题的脱节性质表示歉意。

考虑更改您的 HAVING 子句,将 IIF() 值计数调整为 Student ID 个实例的完整计数:

SELECT t.[Student ID], Count(t.[Registration Status]) AS [CountOfRegistrationStatus]
FROM [Registration Status Record] t
GROUP BY t.[Student ID]
HAVING SUM(IIF(((t.[Registration Status])="Complete") 
           AND ((t.[Notification Status])="Notified"), 1, 0)) = Count(*)