这种表如何统计出每个人的出勤天数呢?

IMG_20251024_090841.jpg

FineReport apengjun 发布于 2025-10-24 09:09
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
华莉星宸Lv7专家互助
发布于2025-10-24 09:11

这是对应的日?出勤是是什么标识?

在数据集用case when判断就好

image.png

  • apengjun apengjun(提问者) 对每列一天31列。里面X是休息其他都是班次出勤,有9个编码是对应年假,出差这种排除掉。
    2025-10-24 09:22 
  • apengjun apengjun(提问者) X是双休和法定节假日
    2025-10-24 09:23 
  • 华莉星宸 华莉星宸 回复 apengjun(提问者) 你对每个字段判断一下 1表示出勤
    case when d1<>[X] then 1 esle 0 end as d1
    最后直接 d1+d2+..+d31 就是出勤天数
    2025-10-24 09:26 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2025-10-24 09:10

里面值代表什么都不知道 怎么回答

  • apengjun apengjun(提问者) X代表休息,其他是各种班次白班,夜班,轮值之类都算出勤的。我就不知道这种每天一列的怎么去统计。
    2025-10-24 09:20 
  • Z4u3z1 Z4u3z1 回复 apengjun(提问者) 最方便的方法就是用存储过程加任务作业在1号把上月的考勤重新计算生产一张考勤表,然后直接查询该考勤表即可
    2025-10-24 09:25 
最佳回答
0
快乐星光Lv5中级互助
发布于2025-10-24 09:19(编辑于 2025-10-24 09:23)

你这个是原数据还是你转换过后的数据?正常来说如果想要统计【天数/人】数据,最好使用横向数据表

userid          月/天       出勤状态

user001      2025-02-01         0010u

user001      2025-02-02         0010y

user001      2025-02-03         

user002      2025-02-01         0010y

user002      2025-02-02         0010u

user002      2025-02-03    

上面这个表格的格式直接使用sum函数就可以计算了     

  • apengjun apengjun(提问者) 这是考勤系统的原表。
    2025-10-24 10:07 
  • 快乐星光 快乐星光 回复 apengjun(提问者) 那就用楼上说的case,或者对原表进行行转列后再统计
    2025-10-24 10:23 
最佳回答
0
lxy2Lv6中级互助
发布于2025-10-24 09:26

SQL SERVER参考:

WITH

A AS(

SELECT '2025-01' AS COL1,'X' AS D1,'A0001' AS D2,'X' AS D3

UNION ALL

SELECT '2025-01' AS COL1,'B0001' AS D1,'A0001' AS D2,'X' AS D3

UNION ALL

SELECT '2025-01' AS COL1,'A0001' AS D1,'B0001' AS D2,'C0001' AS D3

),

AttendanceData AS (

    SELECT 

        col1 AS month,

        day_column,

        employee_id

    FROM A

    UNPIVOT (

        employee_id FOR day_column IN (d1, d2, d3)

    ) AS unpvt

    WHERE employee_id IS NOT NULL

)

SELECT 

    month,

    employee_id,

    COUNT(*) AS attendance_days

FROM AttendanceData

GROUP BY month, employee_id

ORDER BY month, employee_id;

  • 4关注人数
  • 43浏览人数
  • 最后回答于:2025-10-24 09:26
    请选择关闭问题的原因
    确定 取消
    返回顶部