Count + IIF - 访问查询

时间:2014-04-10 13:59:47

标签: sql ms-access count iif

公司的员工分为A,B和C类,无论他们在哪个部门工作(财务,人力资源,销售......)

如何编写查询(Access 2010)以检索每个类别和每个部门的员工数量?

最终输出将是excel表,公司部​​门将在A列,B列中的A类,列​​中的B类和D列中的C类。

我认为嵌套在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语句并避免编写子查询以计算每个分区的值。

4 个答案:

答案 0 :(得分:4)

Count计算每个非空值...因此,无论[Category]值如何,您都会为每一行计算1。

如果你想坚持使用Count ...

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

否则切换到Sum ...

Sum(IIf([Category]="A",1,0))

答案 1 :(得分:2)

使用GROUP BY代替IIF。试试这个:

SELECT [Division:], [Category], Count([Category]) AS Category_Count
FROM tblAssssDB
GROUP BY [Division:], [Category];

答案 2 :(得分:0)

试试这个计数:

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

我将qry分组并将Expression放在我创建的Count字段下。它对我有用

答案 3 :(得分:-2)

Select count(iif(fieldname='a',1,null)) as  asde 
from [table name] 
where .....