2013-04-05 85 views
0

采取以下:COUNT评估为零,如果没有符合条件的记录

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,但也没有收到任何结果。

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

编辑:

给一点细节推理。

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

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

我把这些在另一个查询(original_recruits + new_recruits) - 如果没有新的新兵,我仍然需要显示original_recruits,所以如果没有记录我需要它评价为零而不是null,所以最终总和仍然有效。

+0

您的查询似乎没有逗号。请发布可以编译的查询。 – IndoKnight 2013-04-05 09:02:04

+0

当你的结果不依赖它时,你为什么要加入到子查询中?另外,你有一个单独的表,里面有studyrecord详细信息? – 2013-04-05 09:02:18

+0

添加了逗号。该表包含跟踪更改的同一记录的多个实例 - 子查询选择最新的编辑日期/时间,因此是最新的记录版本。是将研究记录详细信息保存在单独的表中。 – 2013-04-05 09:03:26

回答

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 
; 
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 
+0

我在原来的问题中增加了一些解释。 – 2013-04-05 09:23:27