采取以下措施:
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
这是一个问题,因为加入是record_id
吗?我尝试将INNER
更改为LEFT
,但也未收到任何结果。
问 如果没有符合条件的记录,如何将上述评估为零?
修改
为推理提供一些细节。
在使用数据库之前,研究表包含一个名为“original_recruits”的字段。
访问表跟踪new_recruits(每项研究的记录数)。
我将这些结合在另一个查询中(original_recruits + new_recruits) - 如果没有新招募我仍然需要显示original_recruits所以如果没有记录我需要它来评估为零而不是null所以最后的总和仍然的工作原理。
答案 0 :(得分:0)
您似乎想通过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
答案 1 :(得分:0)
我通过修改最终查询解决了这个问题,在那里我显示了将原始和新招募人员组合在一起的结果,以便在那里包含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
;