具有内部联接的MS Access COUNT

时间:2018-09-19 19:34:05

标签: sql ms-access

陷入一个涉及MS ACCESS DB和两个表的问题,试图通过计数获得两个不同的记录结果。

我正在使用的两个表都有一个主键字段以及一个包含1或0的字段以标记记录是否被标记为删除。

问题是我无法从此查询中获得总数和差额,我只能检索所有记录的计数,而不仅仅是未标记为删除的记录。

示例类别有两个与之关联的内容记录,但一个在删除字段中具有1,另一个具有0。我正在尝试获取数据。

我尝试使用SUM,但这样做时收到来自MS ACCESS的错误。这是我在下面使用的当前查询字符串。

要澄清一下,这样做的原因是这样,当我从记录集取回数据后,便可以得到两个结果并在客户端处理差异。

一个类别可能具有多个内容,并且与每个类别关联的某些内容可能具有标记为删除的某些记录,而其他则可能没有。

下面是我正在使用的SQL。

 Count(CONTENT.contentId) as cntDifference SUM(CASE WHEN cntDifference = 1 
 then 1 else 0) has also not proven to be successful.

 SELECT CATEGORY.categoryId, CATEGORY.categoryTitle, CATEGORY.categoryDate, 
 Count(CONTENT.contentId) AS cntTotal, Last(CONTENT.contentDate) AS cntDate, 
 CATEGORY.isDeleted AS catDel 
 FROM CATEGORY 
 LEFT JOIN CONTENT ON CATEGORY.categoryId = CONTENT.categoryId
 GROUP BY CATEGORY.categoryId, CATEGORY.categoryTitle, 
 CATEGORY.categoryDate, CATEGORY.userLevel, CATEGORY.isDeleted HAVING 
 (((CATEGORY.isDeleted)=0))
 ORDER BY CATEGORY.categoryTitle

1 个答案:

答案 0 :(得分:1)

HAVING  (((CATEGORY.isDeleted)=0)) 

过滤掉已删除的记录,因此您的未删除计数与所有记录的计数相同。

要获取已删除/未删除的计数,请将其删除并使用:

SUM(IIF(CATEGORY.isDeleted=0,1,0)) AS CountOfNonDeleted

对于未删除

SUM(IIF(CATEGORY.isDeleted=1,1,0)) AS CountOfDeleted

代表已删除。您还可以使用这些表达式来获得总计数,已删除计数和未删除计数之间的差异。