如何解决使用多个AND运算符的MS Access VBA SQL查询失败?
我有一个表格(tbl_Avail),该表格显示了不同日期的特定日期和特定日期的不同人的可用性。我正在尝试进行查询,以计算在多个日期和那几天的某些时间可用的人数。
tbl_Avail:(Pas1和Pas2(布尔值)表示我要搜索其可用性的一天中的2个时段。True表示可用-False,不可用)
ID Student Date_Avail Pas1 Pas2
1 Joe 2020/08/09 x
2 Bob 2020/08/09 x
3 Pete 2020/08/09 x
4 Joe 2020/08/08 x x
5 Bob 2020/08/08 x
6 Pete 2020/08/08 x x
在此示例中,我正在搜索日期2020/08/08 Pas2和2020/08/09 Pas1上的可用人数(true),但是当我运行查询时,它返回0-我的预期结果将是2,因为Joe和Pete分别在8日的Pas2和9日的Pas1中可用。
我的查询:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim StudentsAvail As Long
Set rs = db.OpenRecordset("SELECT Count(*) AS StudentsTotal FROM tbl_Avail WHERE ((Pas1=true AND Date_Avail= #2020/08/09#) and (Date_Avail=#2020/08/08# AND Pas2=true))")
StudentsAvail = rs!StudentsTotal
如果我将查询更改为仅使用…。例如,在Pas1 = true和Date_Avail =#2020/08/09#的地方,它可以正常工作。没有错误代码-它仅计数为0。
我对我做错了什么有任何想法,或者有更好的解决方案,请告诉我:-) 谢谢。 彼得
解决方法
一种方法是两种聚合级别:
SELECT Count(*) AS StudentsTotal
FROM (SELECT Student
FROM tbl_Avail
GROUP BY Student
HAVING SUM(IIF(Pas1 = true AND Date_Avail = #2020/08/09#,1,0)) > 0 AND
SUM(IIF(Pas2 = true AND Date_Avail = #2020/08/08#,0)) > 0
) as s;
子查询返回两个条件均为true的学生。如果使用HAVING
子句,因为条件在不同的行上都成立。
外部查询统计学生人数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。