Access中And/Or运算符使用与多字段计数问题求助
解决2015年前总晋升次数统计问题
你的问题很典型——当前的SQL用OR条件筛选记录,只会统计有至少一次符合条件晋升的员工数量,而不是把所有符合条件的晋升次数加起来。咱们直接改代码就能解决:
SELECT SUM( IIF([Date of 1st Promotion]<#1/1/2015#,1,0) + IIF([Date of 2nd Promotion]<#1/1/2015#,1,0) + IIF([Date of 3rd Promotion]<#1/1/2015#,1,0) + IIF([Date of 4th Promotion]<#1/1/2015#,1,0) + IIF([Date of 5th Promotion]<#1/1/2015#,1,0) ) AS [Total Promotions Before 2015] FROM [Employment History];
为什么这个写法能行?
- 对每一条员工记录,我们逐个检查5个晋升日期:如果日期在2015年1月1日之前,就计1次,否则计0次
- 把这5个数值相加,得到单个员工在2015年前的总晋升次数
- 最后用
SUM()函数把所有员工的次数累加,就得到了你要的全局总晋升次数
小补充:如果某些晋升日期字段是NULL(比如员工没有第4、5次晋升),Access的IIF()会自动把NULL判定为不符合条件,返回0,所以不用额外处理空值的情况。
内容的提问来源于stack exchange,提问作者James May
相关产品推荐
相关产品推荐

