MS Access如何将查询结果行转列制作员工考勤报表
MS Access考勤报表格式转换实现方案
两种方式均可实现目标报表格式,无需强制重构现有查询,你可以根据自己的使用场景选择:
方案1:直接基于现有查询制作报表,无需修改查询
- 操作步骤:
- 新建绑定现有查询的报表,进入设计视图,设置报表按「员工ID」分组,保留员工ID组页眉/组页脚,隐藏明细部分
- 对每个目标列对应添加计算文本框,控件来源按规则填写条件求和公式即可:
- OT Shifts Jan列:
=Sum(IIf([Month]="Jan" And [PayCode]="OT", [ShiftsPerEmployee], 0)) - Regular Shifts Jan列:
=Sum(IIf([Month]="Jan" And [PayCode]="Regular", [ShiftsPerEmployee], 0)) - 其余月份的列依次替换公式里的月份参数和Paycode参数即可
- OT Shifts Jan列:
- 适用场景:需要固定报表列数、无需动态适配新增月份的场景
方案2:重构为交叉表查询,直接生成目标格式数据集,制作报表更简便
直接用Access自带的交叉表查询语法,改写后的SQL如下:
TRANSFORM Sum(ShiftsPerEmployee) AS 总班次 SELECT EmployeeID FROM ( SELECT tblAssignedEmployees.EmployeeID, Format(Date_In,"mmm") AS [Month], Count(tblShift.Date_In) AS ShiftsPerEmployee, tblAssignedEmployees.PayCode FROM tblShift INNER JOIN tblAssignedEmployees ON tblShift.ShiftNum = tblAssignedEmployees.ShiftNum GROUP BY tblAssignedEmployees.EmployeeID, Format(Date_In,"mmm"), tblAssignedEmployees.PayCode ) AS 基础统计 GROUP BY EmployeeID PIVOT [PayCode] & " Shifts " & [Month];
- 特点:查询运行后直接输出你需要的宽表格式,字段名自动生成
OT Shifts Jan、Regular Shifts Jan这类格式,直接绑定到报表即可,无需额外编写控件条件,后续新增月份或薪资代码时会自动扩展列,适配性更强。
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

