第一次发帖。读者已经有一段时间了。这个网站回答了我曾经遇到的每一个问题!但是,我遇到了一个我根本无法找到答案的问题。
我是Access新手,但我在工作项目中做得很好。这是背景:
我们向客户发送调查,对从1-10与他们交谈的员工进行评分。收到后,我将它们输入一个名为tblSurveys的表中,其中包含与之交谈的员工的ID。还有另一个表,其中包含employeeID,员工姓名及其主管的ID。还有另一个表包含SupervisorID,主管的名称和区域经理的ID。最后一个表包括RegionalManagerID和区域管理器的名称。然后它们在Access中相关。主键是每个组的ID,Surveys有一个名为SurveyID的自动编号。
希望一切都有意义。
我们对员工进行评分的方式取决于调查结果:1-6是" Detractor"计为-1,9-10是" Promoter"计为+1。我们将这些数字相加,然后除以调查总数。例如:
我得到5个调查结果:10,10,10,5,8。得分为(3-1)/ 5 = 40%,因为有3个"促销员",1&#34 ; Detractor",共5次调查。凉。
回到问题所在。
我正在尝试获得一个查询,该查询会生成每个员工的列表及其各自的分数(来自上面的计算)。我想我可以简单地使用三个查询,一个要求计算每个员工有多少个批评者,另一个要求计算每个员工的总推广人数,另一个用于每个员工的总调查数。 如何在此之后创建一个吐出计算的查询?我已经被困在这两天了。
一旦我开始工作,我需要做同样的事情但是按照主管,然后按区域经理申请。
然后我需要一份报告,基本上列出整个公司的总分,然后是每个区域经理的分数,然后是每个主管的分数,然后是每个员工的分数。 (像嵌套一样)
我该如何做到这一点?
祝你好运, 大卫
答案 0 :(得分:0)
您似乎过度思考问题 - 您可以在一个查询中执行整个Promoter / Detractor得分事情。您需要一个聚合子查询,其字段为:Score:Sum(Choose([SurveyResult],-1,-1,-1,-1,-1,-1,0,0,1,1))/Count(*)
。将EmployeeID
字段添加到Group By
。
由于Choose返回一个基于输入整数的值(在我的示例中然后得到总和),因此非常适合这种情况。只需除以调查结果的数量(Count(*)
)即可获得分数。
将其保存在自己的查询中,然后将其用作主查询中的子查询,并加入EmployeeID
答案 1 :(得分:0)
尝试将多个查询用作单个报告和数据源。
假设你的表看起来像这样......
tblSurveys:
employeeid score
---------- -----
1 10
2 3
2 2
3 7
etc...
tblEmployees:
employeeid EmployeeName SupervisorId
---------- ------------- ------------
1 Employee 1 1
etc...
tblSupervisors:
SuperVisorId SuperVisorName RegManagerId
------------ -------------- -------------
1 Super 1 1
2 Super 2 1
etc...
tblRegManagers:
RegManagerId RegManagerName
------------- -----------------
1 Regional Manager 1
2 Regional Manager 2
etc...
您可以创建多用途查询。请参见下面的SQL ...
查询1:这为您提供了员工统计信息
select SupervisorName,RegManagerId,EmployeeName,
Promoter,Detractor,surveys,Promoter-Detractor AS score,
(Promoter-Detractor)/surveys as result
from
(
select a.EmployeeName,b.SupervisorName, b.RegManagerId,
(select count(*) from tblSurveys where
employeeid=a.employeeid and score<7) as Detractor,
(select count(*) from tblSurveys where
employeeid=a.employeeid and score>6) as Promoter,
(select count(*) from tblSurveys where employeeid=a.employeeid) as surveys
from tblEmployees a left join tblSupervisors b on a.supervisorid=b.supervisorid
)
Query2:这会为您提供主管统计信息,但也会使用员工统计信息(Query1)
select supervisorname,RegManagerId,
promotersum, detractorsum, surveyssum,(promotersum-detractorsum)/surveyssum
from
(select SuperVisorName,RegManagerId, sum(Promoter) as PromoterSum,
sum(Detractor) as DetractorSum,
sum(surveys) as surveyssum from query1 group by SuperVisorName,RegManagerId )
Query3:这为您提供区域经理统计信息,但也使用主管统计信息(Query2)
select RegManagerName, promoter_cnt, detractor_cnt, survey_cnt, promoter_cnt-detractor_cnt as score,
(promoter_cnt-detractor_cnt)/survey_cnt as result
from
(select a.RegManagerName, b.RegManagerId, sum(b.promotersum) as promoter_cnt,
sum(b.detractorsum) as detractor_cnt, sum(b.surveyssum) as survey_cnt
from tblRegManagers a left join query2 b on a.RegManagerId=b.RegManagerId
group by a.RegManagerName, b.RegManagerId)
因此,虽然每个查询都是自己的报告,但前两个用作源查询。