计算迟到和缺卡不准确的问题

使用下面的查询,计算出的迟到和缺卡不准确,不知道什么原因??


select

姓名,

sum(case when 早上状况='正常' or 中午状况='正常' or 下午状况='正常' then 1 else 0 end) as 正常,

sum(case when 早上状况='缺卡' or 下午状况='缺卡' then 1 else 0 end) as 缺卡,

sum(case when 早上状况='迟到' or 中午状况='迟到' or 下午状况='迟到' then 1 else 0 end) as 迟到,

sum(case when 早上状况='早退' or 中午状况='早退' or 下午状况='早退' then 1 else 0 end) as 早退

from 

每日考勤状况表

where 日期>='${dateEditor0}' and 日期 <='${dateEditor1}' 

${if(len(xm)==0,"","and 姓名 like '%"+xm+"%'")}

${if(len(单位_c)=="",""," and 单位 like '%"+单位_c+"%'")}

group by 

姓名


FineReport nxwzqy1 发布于 2020-11-16 11:26
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
axingLv6专家互助
发布于2020-11-16 11:32

image.png

使用or关系这样计算一天三次正常也会被计算为一次,应该改为

select
姓名,
sum(case when 早上状况='正常' then 1 else 0 end+case when 中午状况='正常' then 1 else 0 end+case when 下午状况='正常' then 1 else 0 end ) as 正常,
sum(case when 早上状况='缺卡' then 1 else 0 end+case when 中午状况='缺卡' then 1 else 0 end+case when 下午状况='缺卡' then 1 else 0 end ) as 缺卡,
sum(case when 早上状况='迟到' then 1 else 0 end+case when 中午状况='迟到' then 1 else 0 end+case when 下午状况='迟到' then 1 else 0 end ) as 迟到,
sum(case when 早上状况='早退' then 1 else 0 end+case when 中午状况='早退' then 1 else 0 end+case when 下午状况='早退' then 1 else 0 end ) as 早退
from 
每日考勤状况表
where 日期>='${dateEditor0}' and 日期 <='${dateEditor1}' 
${if(len(xm)==0,"","and 姓名 like '%"+xm+"%'")}
${if(len(单位_c)=="",""," and 单位 like '%"+单位_c+"%'")}
group by 
姓名


最佳回答
1
烟尘Lv6高级互助
发布于2020-11-16 11:30(编辑于 2020-11-16 11:31)

把正常的or改成and

sum(case when 早上状况='正常' and 中午状况='正常' and 下午状况='正常' then 1 else 0 end) as 正常,

最佳回答
1
ColdmanLv6高级互助
发布于2020-11-16 11:37(编辑于 2020-11-16 11:38)

重复计算了,逻辑不严谨

假如早上正常,中午缺卡,下午早退的话,你这个会在正常里面计算1次,缺卡里面计算一次,早退里面计算一次

  • 4关注人数
  • 343浏览人数
  • 最后回答于:2020-11-16 11:38
    请选择关闭问题的原因
    确定 取消
    返回顶部