繁体   English   中英

MS Access 将查询结果行透视到列中

[英]MS Access Pivoting Query Result Rows into Columns

我是使用 MS-Access 报告的新手。 我有一个查询返回员工时间表的结果,按月份和工资码分组。 我想做一份报告,显示以下内容

员工 加班班一月 定期轮班 加班班二月 定期轮班二月
1234 1 1 2 1
5678 5 2 1 0

但是我的查询格式为:

员工 转移 支付码
1234 1 旧约
1234 1 常规的
1234 二月 2 旧约
1234 二月 1 常规的
5678 5 旧约
5678 2 常规的
5678 二月 1 旧约
5678 二月 0 常规的

是否可以有条件地告诉报告中的字段引用特定的“Where 子句”,以便我可以随意移动字段,或者我是否需要修改我的查询才能做到这一点?

作为参考,我的查询代码是:

SELECT tblAssignedEmployees.EmployeeID, Format(Date_In,"yyyy-mm") 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,"yyyy-mm"), tblAssignedEmployees.PayCode;

考虑条件聚合:

SELECT e.EmployeeID
     , SUM(IIF(MONTH(s.Date_In) = 1 AND e.PayCode = 'OT', 1, 0) AS [OT Shifts Jan]
     , SUM(IIF(MONTH(s.Date_In) = 1 AND e.PayCode = 'Regular', 1, 0) AS [Regular Shifts Jan]
     , SUM(IIF(MONTH(s.Date_In) = 2 AND e.PayCode = 'OT', 1, 0) AS [OT Shifts Feb]
     , SUM(IIF(MONTH(s.Date_In) = 2 AND e.PayCode = 'Regular', 1, 0) AS [Regular Shifts Feb]
FROM tblShift s
INNER JOIN tblAssignedEmployees e
   ON s.ShiftNum = e.ShiftNum
GROUP BY e.EmployeeID

没有IIF甚至更短,将 True 条件相加但乘以 -1,因为 Access 将 True 视为 -1, False 视为 0。

SELECT e.EmployeeID
     , SUM(MONTH(s.Date_In) = 1 AND e.PayCode = 'OT') * -1 AS [OT Shifts Jan]
     , SUM(MONTH(s.Date_In) = 1 AND e.PayCode = 'Regular') * -1 AS [Regular Shifts Jan]
     , SUM(MONTH(s.Date_In) = 2 AND e.PayCode = 'OT') * -1 AS [OT Shifts Feb]
     , SUM(MONTH(s.Date_In) = 2 AND e.PayCode = 'Regular') * -1 AS [Regular Shifts Feb]
FROM tblShift s
INNER JOIN tblAssignedEmployees e
   ON s.ShiftNum = e.ShiftNum
GROUP BY e.EmployeeID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM