You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB 10.4中生成带动态日期列的考勤透视表

实现方案

可以通过条件聚合实现你需要的格式转换,以下是适用于MariaDB 10.4的SQL语句(替换attendance_table为你的实际表名):

SELECT 
    att_id,
    MAX(CASE WHEN scan_date = '2023-10-21' 
             THEN CONCAT(TIME(scan_in_time), ' - ', 
                         IF(scan_out_time = '0000-00-00 00:00:00', 'NULL', TIME(scan_out_time)))
             END) AS `2023-10-21`,
    MAX(CASE WHEN scan_date = '2023-10-22' 
             THEN CONCAT(TIME(scan_in_time), ' - ', 
                         IF(scan_out_time = '0000-00-00 00:00:00', 'NULL', TIME(scan_out_time)))
             END) AS `2023-10-22`
FROM attendance_table
GROUP BY att_id
ORDER BY att_id;

关键逻辑说明:

  • CASE WHEN:针对每个目标日期筛选对应记录,将考勤时间拼接成上班时间 - 下班时间的格式;若下班时间为0000-00-00 00:00:00,则显示文本NULL
  • MAX():由于每个员工每天最多一条考勤记录,用聚合函数确保分组后每个日期列仅返回对应值(无记录时自动返回NULL)
  • GROUP BY att_id:按员工ID分组,将同一员工的多日期记录转换为横向列

如果需要动态适配任意日期(而非固定的2023-10-21/22),可以通过编写存储过程生成动态SQL,但静态SQL已能满足你给出的示例需求。

内容的提问来源于stack exchange,提问作者FannyKaunang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:57:28