Access SQL技术咨询:按Bezeichnung分组统计唯一ID_Projekte_FK(带日期筛选)
解决Access SQL中按分组统计唯一ID数量的问题
没问题,我来帮你调整这个查询,实现按Bezeichnung分组、统计符合日期条件的唯一ID_Projekte_FK总数的需求。
问题分析
你原代码的核心问题是使用了普通的Count()函数,它会统计分组内所有匹配的记录(包括重复的ID_Projekte_FK),而我们需要的是去重后的唯一ID数量。Access SQL支持Count(DISTINCT 字段)语法来实现这个需求,只需要对原代码做一处关键修改。
修改后的SQL代码
SELECT tbl_Werkzeugtypen.Bezeichnung, Count(DISTINCT tbl_Projekte_Phasen.ID_Projekte_FK) AS AnzahlvonID_Projekte_FK FROM tbl_Projekte_Phasen INNER JOIN (tbl_Projekte INNER JOIN tbl_Werkzeugtypen ON tbl_Projekte.Werkzeugtyp = tbl_Werkzeugtypen.ID_Werkzeugtypen) ON tbl_Projekte_Phasen.ID_Projekte_FK = tbl_Projekte.ID_Projekte WHERE tbl_Projekte_Phasen.Out >= #2018-01-01# -- 推荐用YYYY-MM-DD格式,避免日期格式歧义 GROUP BY tbl_Werkzeugtypen.Bezeichnung HAVING tbl_Werkzeugtypen.Bezeichnung <> "Entwicklungsprojekt";
关键修改说明
- 将
Count(tbl_Projekte_Phasen.ID_Projekte_FK)改为Count(DISTINCT tbl_Projekte_Phasen.ID_Projekte_FK):这会让Access统计每个Bezeichnung分组下不重复的ID_Projekte_FK数量,正好符合你的需求。 - 日期格式调整为
#2018-01-01#:虽然Access支持#1/1/2018#或#01.01.2018#,但YYYY-MM-DD是通用的无歧义日期格式,能避免因系统区域设置不同导致的日期解析错误。 - 保留了你原有的表连接逻辑、日期筛选条件和分组排除规则,确保其他需求不受影响。
备选方案(针对旧版Access)
如果你的Access版本不支持Count(DISTINCT)(极少数旧版本),可以用子查询先获取每个分组的唯一ID,再统计数量:
SELECT sub.Bezeichnung, Count(sub.ID_Projekte_FK) AS AnzahlvonID_Projekte_FK FROM (SELECT DISTINCT tbl_Werkzeugtypen.Bezeichnung, tbl_Projekte_Phasen.ID_Projekte_FK FROM tbl_Projekte_Phasen INNER JOIN (tbl_Projekte INNER JOIN tbl_Werkzeugtypen ON tbl_Projekte.Werkzeugtyp = tbl_Werkzeugtypen.ID_Werkzeugtypen) ON tbl_Projekte_Phasen.ID_Projekte_FK = tbl_Projekte.ID_Projekte WHERE tbl_Projekte_Phasen.Out >= #2018-01-01# AND tbl_Werkzeugtypen.Bezeichnung <> "Entwicklungsprojekt") AS sub GROUP BY sub.Bezeichnung;
内容的提问来源于stack exchange,提问作者Moritz
相关产品推荐
相关产品推荐

