我正在尝试在我设置的访问查询中获得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;
答案 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))