COUNT, использование IIF для подсчета записей, которые также имеют определенное значение поля - PullRequest
0 голосов
/ 15 октября 2018

Используя MS Access, у меня есть две таблицы, одна - категории, а другая - содержимое.

Мой начальный оператор SQL, приведенный ниже, берет счетчик каждого контента, связанного с категорией, и возвращает счетчик, связанный с ним.с каждой категорией.

Так что для каждой КАТЕГОРИИ я просто пытаюсь вернуть еще один счетчик, в котором я подсчитываю КОНТЕНТ, который имеет определенный уровень пользователя и не удаляется для каждой КАТЕГОРИИ.

Нижеэто то, с чем я борюсь, поскольку я не уверен, что вы действительно можете использовать 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

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я считаю, что нашел решение

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

Это вернет разницу в подсчете для CONTENT для каждой КАТЕГОРИИ, которая не удалена и имеет определенный уровень пользователя.

0 голосов
/ 15 октября 2018

вы можете использовать следующее

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

COUNT не будет считать NULL, но будет считать ноль.SUM рассчитает сумму всех 1 - это второй способ достижения того же.

IIF существует в более новых версиях SQL

...