Ms access 如果没有匹配的记录,则计数计算为零
采取以下行动:Ms access 如果没有匹配的记录,则计数计算为零,ms-access,ms-access-2007,Ms Access,Ms Access 2007,采取以下行动: SELECT Count(a.record_id) AS newrecruits ,a.studyrecord_id FROM visits AS a INNER JOIN ( SELECT record_id , MAX(modtime) AS latest FROM visits GROUP BY record_id ) AS b ON (a.
SELECT
Count(a.record_id) AS newrecruits
,a.studyrecord_id
FROM
visits AS a
INNER JOIN
(
SELECT
record_id
, MAX(modtime) AS latest
FROM
visits
GROUP BY
record_id
) AS b
ON (a.record_id = b.record_id) AND (a.modtime = b.latest)
WHERE (((a.visit_type_id)=1))
GROUP BY a.studyrecord_id;
如果没有记录,我想修改COUNT
部分以显示零,因为我假设COUNT
将计算为Null
我尝试了以下方法,但仍然没有结果:
IIF(ISNULL(COUNT(a.record_id)),0,COUNT(a.record_id)) AS newrecruits
这是否是因为联接在记录\u id
上而导致的问题?我尝试将内部
更改为左侧
,但也没有收到任何结果
Q
如果没有与标准匹配的记录,如何使上述值计算为零
编辑:
给推理一点细节
“研究”表包含一个名为“原始招募”的字段,该字段基于数据库使用前的活动
访问表跟踪新招募的新兵(每项研究的记录计数)
我在另一个查询中组合了这些信息(原始新兵+新新兵)-如果没有新的新兵,我仍然需要显示原始新兵,因此如果没有记录,我需要将其求值为零而不是空,以便最终的总和仍然有效。似乎您希望按StudyRecords统计记录。
如果没有记录时需要计数为零,则需要加入名为StudyRecords的表。
你有吗?否则,在没有行的情况下要求行是胡说八道 假设StudyRecords存在,那么查询应该如下所示:
SELECT
Count(a.record_id) AS newrecruits -- a.record_id will be null if there is zero count for a studyrecord, else will contain the id
sr.Id
FROM
visits AS a
INNER JOIN
(
SELECT
record_id
, MAX(modtime) AS latest
FROM
visits
GROUP BY
record_id
) AS b
ON (a.record_id = b.record_id) AND (a.modtime = b.latest)
LEFT OUTER JOIN studyrecord sr
ON sr.Id = a.studyrecord_id
WHERE a.visit_type_id = 1
GROUP BY sr.Id
我通过修改最后的查询解决了这个问题,在那里我显示了合并原始和新招募人员的结果,以包括
IIF
SELECT
a.*
, IIF(IsNull([totalrecruits]),consents,totalrecruits)/a.target AS prog
, IIf(IsNull([totalrecruits]),consents,totalrecruits) AS trecruits
FROM
q_latest_studies AS a
LEFT JOIN q_totalrecruitment AS b
ON a.studyrecord_id=b.studyrecord_id
;
您的查询似乎缺少逗号。请发布可以编译的查询。当您的结果不依赖于子查询时,为什么要加入子查询?另外,您是否有单独的表格保存studyrecord详细信息?添加了逗号。该表包含同一记录的多个实例以跟踪更改-子查询选择最新的编辑日期/时间,因此选择记录的最新版本。是的,studyrecord详细信息保存在单独的表中。我对原始问题添加了更多解释。