我有一个包含员工出勤详细信息的表格。对于此示例,我们假设只有三种不同的出勤类型:“假日”/“银行假日”/“病假”。
我可以毫无困难地找到每个员工的总数,但是我需要结合“假日”和“银行假日”的结果。
例如,如果表格包含以下数据:
约翰 - '假期'</p>
约翰 - '银行假期'</p>
约翰 - “疾病”</p>
珍妮——“假期”</p>
结果应该是
名称 - Days Sick - Days Holiday
约翰 – 1 – 2
珍妮 - 0 - 1
You can use IIF
inside a SUM Statement to count certain conditions:
SELECT [YourTable].[Name],
SUM(IIF([YourTable].[Attendance] = 'Sickness', 1, 0)) AS [Days Sick],
SUM(IIF([YourTable].[Attendance] IN ('Holiday' , 'Bank-Holiday'), 1, 0)) AS [Days Holiday]
FROM [YourTable]
GROUP BY [YourTable].[Name];
我的两分钱价值:
而不是将这种类型的分类硬编码到查询中,您实际上应该创建一个 [AbsenceCategories] 表,其值如下......
AbsenceType AbsenceCategory
----------- ---------------
Sickness Sick
Holiday Holiday
Bank-Holiday Holiday
...因此,当“最高管理层”向您发送备忘录,通知您必须单独跟踪“计划外缺勤”并将其归类为“假期”时,您只需将其添加到您的表中,您就不必更改所有查询等。
You want a conditional aggregation, something like:
select name,
sum(iif(which = 'Sickness', 1, 0)) as SickDays,
sum(iif(which = 'Holiday' or which = 'Bank Holiday', 1, 0)) as Holiday
from t
group by name