0

采取以下措施:

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吗?我尝试将其更改为INNERLEFT但也没有收到任何结果。

Q 如果没有符合条件的记录,如何使上述评估为零?

编辑:

稍微详细说明一下推理。

研究表包含一个名为“original_recruits”的字段,该字段基于使用数据库之前的活动。

访问表跟踪 new_recruits(每项研究的记录计数)。

我将这些组合在另一个查询中(original_recruits + new_recruits)- 如果没有新招募人员,我仍然需要显示 original_recruits,因此如果没有记录,我需要将其评估为零而不是 null,因此最终总和仍然有效。

4

2 回答 2

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
于 2013-04-05T09:05:20.197 回答
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
;
于 2013-04-05T10:01:43.360 回答