首页 > 解决方案 > MS Access COUNT 与 INNER JOIN

问题描述

遇到一个涉及 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

标签: sqlms-access

解决方案


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

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

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

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

对于未删除

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

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


推荐阅读