Count + IIF - запрос доступа

Сотрудники компании делятся на категории А, В и С независимо от того, в каком подразделении они работают (Финансы, HR, Продажи...)

Как я могу написать запрос (Access 2010), чтобы получить количество сотрудников для каждой категории и каждого подразделения?

Конечным результатом будет лист Excel, где подразделения компании будут в столбце A, категория A в столбце B, категория B в столбце и категория C в столбце D.

Я думал, что IIF(), вложенный в COUNT(), выполнит эту работу, но на самом деле он подсчитывает общее количество сотрудников, а не дает разбивку по категориям.

Есть идеи?

SELECT
    tblAssssDB.[Division:],
    COUNT( IIF( [Category]   = "A", 1, 0 ) ) AS Count_A,
    COUNT( IIF( [Category]   = "B", 1, 0 ) ) AS Count_B,
    COUNT( IIF( [ET Outcome] = "C", 1, 0 ) ) AS Count_C
FROM
    tblAssssDB
GROUP BY
    tblAssssDB.[Division:];

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


person ProtoVB    schedule 10.04.2014    source источник
comment
Используйте sum() вместо count()   -  person juergen d    schedule 10.04.2014
comment
Вы смотрели кросстаблицы?   -  person Fionnuala    schedule 10.04.2014


Ответы (4)


Count подсчитывает каждое ненулевое значение... поэтому вы считаете 1 для каждой строки независимо от значения [Category].

Если вы хотите остаться с Count ...

Count(IIf([Category]="A",1,Null))

В противном случае переключитесь на Sum ...

Sum(IIf([Category]="A",1,0))
person HansUp    schedule 10.04.2014

Используйте GROUP BY вместо IIF. Попробуй это:

SELECT [Division:], [Category], Count([Category]) AS Category_Count
FROM tblAssssDB
GROUP BY [Division:], [Category];
person Racil Hilan    schedule 10.04.2014

Попробуйте этот счетчик:

Count(IIf([Field1]="N",1))+Count(IIf([Field2]="N",1)) ...

Я сгруппировал свой запрос и поместил Expression в это поле Count, которое я создал. Это сработало для меня

person Jimmy    schedule 08.05.2015

person    schedule
comment
Выберите доступ.[Подразделение:], Count(IIf([Категория]='A',1,null)) AS Count_A, Count(IIf([Category]='B',1,null)) AS Count_B, Count( IIf([ET Outcome]='C',1,null)) AS Count_C FROM tblAssssDB GROUP BY tblAssssDB.[Division:] - person Earl; 25.02.2015