正如标题所说,我正在寻找一种方法来计算一个人完成任务的百分比。数据是结构化的,因此每个人可以有许多任务,每个任务可以有许多子任务,如下所述:
员工
- (pk) (AutoNumber) employee_id
- (文本)FirstName
- (文本)LastName
任务/strong>
- (pk) (AutoNumber) task_id
- (颗)(数字)employee_id <
- (备忘录)描述/gh>
- (Yes/No)完成
子任务
- (pk) (AutoNumber) subtask_id
- (颗)(数字)task_id <
- (备忘录)描述/gh>
- (Yes/No)完成
我一直在尝试制作一个报告(名为"任务完成率"),列出所有员工,他们完成的任务数量,他们完成的任务总数,以及他们的完成率。目前,我有以下两个查询:
- SELECT Count(employee_id) FROM [Tasks] AS TotalTasks WHERE [Tasks]。employee_id =报告!任务完成率!txt_employeeID
- SELECT Count(employee_id) FROM [Tasks] AS CompletedTasks WHERE [Tasks]。employee_id =报表!任务完成率!txt_employeeID AND [Tasks]。完成= 1
这两个都是必要的,还是有一种方法可以从一个查询中获得两个计数?另外,我该如何在报告中使用这些总数呢?报告的Record Source被设置为Employees表,这样它就可以列出所有雇员。我已经为每个总数准备好了文本框,但是我在为每个文本框使用源代码中的表达式构建器来实际显示查询结果时遇到了问题。我将其中一个文本框的源设置为=[qry_TotalTasksPerEmployee]![TotalTasks](通过表达式生成器),但它不断提示我输入[qry_TotalTasksPerEmployee]的值。有什么办法让它工作吗?
试着取完成值的平均值。例如:
SELECT employee_id, -avg(Completed) FROM [Tasks] GROUP BY employee_id
avg
之前的-
是因为true
被存储为-1
,正如@Neil指出的。
我不确定你说的报告是什么意思——在报告中放置查询结果应该很容易。
我不是真的进入msaccess报告,但由于完成似乎是一个0或1,你应该朝着以下查询工作-编辑结果是1或-1为bool,所以不能做一个总和(完成),但需要一个IIF()
Select employee_id, count(*), sum(IIF(completed,1,0)), sum(IIF(completed,1,0))*100/count(*) as rate
From employees
Left join tasks
On tasks.employee_id = employees.employee_id
Group by employee_id
注意,对于没有任务的员工,这确实会产生除以零的问题。您必须决定如何处理这些(排除,显示为0%或…)