创建 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]
.
示例数据:
[Semester]
(学生注册的学期)
- 2016 年秋季,Spring2017 年
Registration Status
(学生注册是否完成)
- 完成,需要,错误
[Notification Status]
(报名完成后,是否通知学生)
- 已通知,待处理
我想要创建另一个查询或 Iif() 语句,它将 检查任何给定学生的所有行和 return 他们的 总体 注册状态 与学期无关。
如果使用 Iif() 语句,这里是我要寻找的一些标准:
- 如果学生成功注册了所有学期,并且他们已收到有关每个学期的通知,它会报告类似 "All Registrations Complete, Student Fully Notified."
的内容
- 如果学生已完全注册但只收到一个学期的通知,"All Registrations Complete, Notification Incomplete."
- 等等...我想你明白了。
就 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(*)
我正在管理一个学生数据库。每个学期,我们都会为学生注册 类,并在 table、[Registration Status Record]
中跟踪此进度。 table 中的每一行基本上包括:[Student ID]
、[Semester]
、[Registration Status]
和 [Notification Status]
.
示例数据:
[Semester]
(学生注册的学期)- 2016 年秋季,Spring2017 年
Registration Status
(学生注册是否完成)- 完成,需要,错误
[Notification Status]
(报名完成后,是否通知学生)- 已通知,待处理
我想要创建另一个查询或 Iif() 语句,它将 检查任何给定学生的所有行和 return 他们的 总体 注册状态 与学期无关。
如果使用 Iif() 语句,这里是我要寻找的一些标准:
- 如果学生成功注册了所有学期,并且他们已收到有关每个学期的通知,它会报告类似 "All Registrations Complete, Student Fully Notified." 的内容
- 如果学生已完全注册但只收到一个学期的通知,"All Registrations Complete, Notification Incomplete."
- 等等...我想你明白了。
就 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(*)