如果没有匹配的记录,则COUNT评估为零

时间:2013-04-05 08:58:29

标签: 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.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所以最后的总和仍然的工作原理。

2 个答案:

答案 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
;