【问题标题】:COUNT, IIF usage for counting records that also have a specific field value matchedCOUNT、IIF 用于计算也匹配特定字段值的记录
【发布时间】:2018-10-15 13:36:03
【问题描述】:

使用MS Access,我有两个表,一个是类别,另一个是内容。

我的初始 SQL 语句(包括在下面)对与类别关联的每个内容进行计数,并返回与每个类别关联的计数。

因此,对于每个 CATEGORY,我只是尝试返回另一个计数,其中我计算具有特定用户级别且不会为每个 CATEGORY 删除的 CONTENT。

以下是我正在努力解决的问题,因为我不确定您是否真的可以像这样使用 COUNT。

 COUNT(IIf([CONTENT.isDeleted]=0,1,0)) - COUNT(IIf([CONTENT.userLevel]=2)) AS userLevelCount

这是我添加但不起作用的完整选择语句。

 SELECT

 CATEGORY.categoryId,
 CATEGORY.categoryTitle,
 CATEGORY.categoryDate,
 CATEGORY.userLevel,
 Last(CONTENT.contentDate) AS contentDate,
 CATEGORY.isDeleted AS categoryDeleted,
 COUNT(IIf([CONTENT.isDeleted]=0,1,0)) AS countTotal,
 COUNT(IIf([CONTENT.isDeleted]=1,[CONTENT.contentID],Null))           AS countDeleted,
 COUNT([CONTENT.categoryId]) -      COUNT(IIf([CONTENT.isDeleted]=1,[CONTENT.contentID],Null))AS countDifference,


 COUNT(IIf([CONTENT.isDeleted]=0,1,0)) - COUNT(IIf([CONTENT.userLevel]=2)) AS userLevelCount

 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

【问题讨论】:

  • 使用 SUM 而不是 COUNT - 在您计算 0 和 1 的那一刻,它们都算作 1 - 所以 SUM 1 和 0 可以得到您似乎需要的答案

标签: database ms-access jet-sql


【解决方案1】:

你应该可以使用下面的

SUM(IIf([CONTENT.isDeleted]=0,1,0)) - COUNT(IIf([CONTENT.userLevel]=2,1,NULL)) AS userLevelCount

COUNT 不会计数为 NULL,但会计数为零。 SUM 将计算所有 1 的总和 - 这是实现相同的第二种方法。

IIF 存在于较新的 SQL 版本中

【讨论】:

    【解决方案2】:

    我相信我找到了解决方案

     Count(IIf([CONTENT.userLevel]=2,[CONTENT.contentID],Null)) AS countDifference2
    

    这将返回每个未删除且具有特定用户级别的 CATEGORY 的 CONTENT 计数差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 2021-02-06
      • 2012-04-17
      相关资源
      最近更新 更多