根据MS Access 2010中查询的总计计算字段

时间:2014-03-13 00:34:47

标签: sql ms-access ms-access-2010

第一次发帖。读者已经有一段时间了。这个网站回答了我曾经遇到的每一个问题!但是,我遇到了一个我根本无法找到答案的问题。

我是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次调查。凉。

回到问题所在。

我正在尝试获得一个查询,该查询会生成每个员工的列表及其各自的分数(来自上面的计算)。我想我可以简单地使用三个查询,一个要求计算每个员工有多少个批评者,另一个要求计算每个员工的总推广人数,另一个用于每个员工的总调查数。 如何在此之后创建一个吐出计算的查询?我已经被困在这两天了。

一旦我开始工作,我需要做同样的事情但是按照主管,然后按区域经理申请。

然后我需要一份报告,基本上列出整个公司的总分,然后是每个区域经理的分数,然后是每个主管的分数,然后是每个员工的分数。 (像嵌套一样)

我该如何做到这一点?

祝你好运, 大卫

2 个答案:

答案 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) 

因此,虽然每个查询都是自己的报告,但前两个用作源查询。