sql - 使用多个 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 的可用人数(真),但是当我运行查询时它返回 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
如果我将查询更改为仅使用 ...。例如 WHERE 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#, 1, 0)) > 0
) as s;
子查询返回两个条件都为真的学生。If 使用HAVING
子句,因为条件在不同的行上为真。
外部查询计算学生数。
推荐阅读
- java - 使用 MockSchemaRegistry 发布 TopologyTestDriver 时出现问题
- html - 悬停时显示另一个 div
- python - 在日期框架中选择特定列到末尾
- javascript - 如何将 Mailchip 弹出表单添加到我的网站
- javascript - 使用 args 重命名函数而不重写它们 - Javascript
- django - 使用其他数据压缩表单域的选择
- node.js - SDK4中如何取消当前对话
- node.js - 快递服务器不发送响应
- hive - HIVE-where子句中子查询中的聚合函数
- .net-core - .NET Core 控制台应用程序看不到环境变量