COUNT IIF的多个条件

时间:2013-12-27 17:48:48

标签: ms-access

我正在尝试在我设置的访问查询中获得2个计数列。

我有所有符合标准的员工,现在我需要计算2个不同的工作组。代码用于Supervisor Level 1,即代码11和Supervisor Level 5,即72-79。我已经尝试了几种不同的计数IIF并且它不起作用,有任何想法或建议吗?

SELECT O896IA_VEMPPRSA.REG_NR, 
  O896IA_VEMPPRSA.DIS_NR, 
  Count(O896IA_VEMPPRSA.SYS_EMP_ID_NR) AS CountOfSYS_EMP_ID_NR
FROM ((O896IA_VEMPPRSA  
  INNER JOIN O867IA_VJOBHST  
  ON O896IA_VEMPPRSA.SYS_EMP_ID_NR = O867IA_VJOBHST.SYS_EMP_ID_NR)  
  INNER JOIN O867IA_VPJOBCO  
  ON O896IA_VEMPPRSA.JOB_CLS_CD = O867IA_VPJOBCO.JOB_CLS_CD)  
  INNER JOIN O867IA_VPJOBCO AS O867IA_VPJOBCO_1  
  ON O867IA_VJOBHST.JOB_CLS_CD = O867IA_VPJOBCO_1.JOB_CLS_CD
WHERE (((O867IA_VJOBHST.REC_EFF_STT_DT)>=#7/1/2012#  
  Or (O867IA_VJOBHST.REC_EFF_STT_DT)>=#1/1/2012#)  
  AND ((O896IA_VEMPPRSA.EMP_EMT_STS_CD)<>"T")  
  AND ((O867IA_VJOBHST.EMP_ACN_TYP_CD)="HIR")  
  AND ((O867IA_VPJOBCO_1.JOB_GRP_CD) In ("11","72","74","77","79")))  
  OR (((O867IA_VJOBHST.REC_EFF_STT_DT)>=#7/1/2012#  
  Or (O867IA_VJOBHST.REC_EFF_STT_DT)>=#1/1/2012#)  
  AND ((O896IA_VEMPPRSA.EMP_EMT_STS_CD)<>"T")  
  AND ((O867IA_VJOBHST.EMP_ACN_TYP_CD)="PRO")  
  AND ((O867IA_VPJOBCO_1.JOB_GRP_CD) In ("11","72","74","77","79")))
GROUP BY O896IA_VEMPPRSA.REG_NR, O896IA_VEMPPRSA.DIS_NR;

1 个答案:

答案 0 :(得分:2)

我认为你所谈论的代码字段是JOB_GRP_CD,它似乎是文本数据类型。

如果这是正确的,您可以使用Sum IIf代替您提到的Count IIf策略,方法是在SELECT子句中添加两个字段表达式

SELECT
    O896IA_VEMPPRSA.REG_NR,
    O896IA_VEMPPRSA.DIS_NR,
    Count(O896IA_VEMPPRSA.SYS_EMP_ID_NR) AS CountOfSYS_EMP_ID_NR,
    Sum(IIf(O867IA_VPJOBCO_1.JOB_GRP_CD = '11', 1, 0))
        AS [Supervisor Level 1],
    Sum(IIf(O867IA_VPJOBCO_1.JOB_GRP_CD IN ('72','74','77','79'), 1, 0))
        AS [Supervisor Level 5]

但如果您更喜欢Count IIf,那也可以。

Count(IIf(O867IA_VPJOBCO_1.JOB_GRP_CD = '11', 1, Null))

如果我猜错字段名称和/或数据类型,请使用符合正确字段和数据类型的条件调整其中一个模式。

Sum(IIf(<condition is True>, 1, 0))
Count(IIf(<condition is True>, 1, Null))