我正在尝试根据 MS Access 中的 ID、日期和选项从行数超过 2 的行中选择查询。
所以在选项列中使用“NO”那么超过2条的记录不会包含在我的sql查询代码中
我的 SQL 代码有问题吗?
所以我的帖子与下面的链接不同
请指导我
桌子
Absen
身份证 | 日期 | 时间 | 输入输出 | 选项 |
---|---|---|---|---|
5008 | 24 年 4 月 28 日 | 08:00 | 在 | |
5008 | 24 年 4 月 28 日 | 17:00 | 出 | |
5009 | 24 年 4 月 29 日 | 08:00 | 在 | |
5009 | 24 年 4 月 29 日 | 17:00 | 出 | |
5009 | 24 年 4 月 29 日 | 17:00 | 出 | 不 |
5010 | 24 年 4 月 28 日 | 08:00 | 在 | |
5011 | 24 年 4 月 30 日 | 08:00 | 在 | |
5011 | 24 年 4 月 30 日 | 08:00 | 在 | |
5011 | 24 年 4 月 30 日 | 17:00 | 出 |
桌子
MASTERID
身份证 | 名称ID | 位置ID |
---|---|---|
5008 | A | 工作人员 |
5009 | B | 工作人员 |
5010 | C | 工作人员 |
5011 | D | 工作人员 |
我使用了这样的 SQL 代码结果:
SELECT a.ID, MASTERID.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID ON a.ID = MASTERID.ID
WHERE a.option is null and exists(select a.ID from ABSEN a2 where a.ID=a2.ID and a.DATE=a2.DATE group by a.ID and a.DATE and a.option having count(*) > 2)
ORDER BY a.ID, a.DATE, a.INOUT;
代码结果
身份证 | 名称ID | 日期 | 时间 | 输入输出 |
---|---|---|---|---|
5009 | B | 24 年 4 月 29 日 | 08:00 | 在 |
5009 | B | 24 年 4 月 29 日 | 17:00 | 出 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 17:00 | 出 |
想要的结果
身份证 | 名称ID | 日期 | 时间 | 输入输出 |
---|---|---|---|---|
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 17:00 | 出 |
使用 2 个嵌套查询和 IN() 函数:
SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option="NO")
AND a.ID IN(SELECT ID FROM ABSEN GROUP BY ID HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;