2014-07-07 26 views
0

我正在尝试在Access中创建一个查询以返回基于1-5答案比例(1 =差等)的调查的平均值。我不能简单地使用avg(q1),因为创建调查并将结果放入数据库的软件(自动数据专家)可以将问题评分为0,如果没有答案的话。这扭曲了结果。返回Access中列的唯一平均值

我不能做...... WHERE Q1> 1,因为这消除了所有其他问题(每行都有Q1,Q2等)。

所以,我试图做一个查询,如本

(SELECT avg(VAL) FROM (SELECT ScannedData.Q1 as VAL FROM ScannedData WHERE ScannedData.Q1 > 1)t) AS AvgOfQ1 

但这个问题是查询返回一个值,并给出所有行相同的值(如5.82)。

正在创建的报告按类别分组,因此最终得到的报告具有A类Q1 5.82,B类Q1 5.82,C类Q1 5.82等等。

要补充一点 - 这个调查的每一个问题都需要像这样计算。

简而言之,如何通过上述查询获得每个班级分组的平均值。

非常感谢您的帮助。

根据要求添加如下:

该表包含问题结果。对于每个问题,都有一个值为0-6的列。因此,对于调查问题1,该列将被命名为Q1,值为1-6。另外还有一个重要的className列,它与调查涉及到的类有关。

所以,我有一个看起来像这样的

|Q1|Q2|Q3|Q4|ClassName  | 
|1 |5 |4 |5 |Asbestos Training| 
|3 |4 |0 |6 |Asbestos Training| 
|3 |1 |3 |4 |Asbestos Training| 
|4 |3 |5 |4 |Microsoft Word | 
|6 |1 |5 |3 |Microsoft Word | 
|0 |2 |5 |1 |Microsoft Word | 

用我上面的查询我得到这样

石棉培训结果Q1Avg 5.82(对于上述结果并不实际数目,只是举例)的纪录 微软培训Q1AVG 5.82

当我需要(使用上面的数据,例如)

石棉培训Q1Avg 2。 33 Microsoft Word Q1Avg 5.00(0不需要计数,因为它被跳过,不应该偏斜结果)。

我没有设计这个数据库。这是软件使用的格式。每次我们创建调查时,它都会删除一个新的访问数据库。

+2

你能提供一些示例数据和预期的效果? –

+0

Gordon Linoff的解决方案看起来不错,你试过了吗? –

回答

2

我想你可能想要条件聚合。在MS Access,这看起来像:

select avg(iif(Q1 > 0, Q1, NULL)) as Q1_avg, 
     avg(iif(Q2 > 0, Q2, NULL)) as Q2_avg, 
     avg(iif(Q3 > 0, Q3, NULL)) as Q3_avg  
from ScannedData; 

如果您想要类本,然后使用group by

select class, avg(iif(Q1 > 0, Q1, NULL)) as Q1_avg, 
     avg(iif(Q2 > 0, Q2, NULL)) as Q2_avg, 
     avg(iif(Q3 > 0, Q3, NULL)) as Q3_avg  
from ScannedData 
group by class; 
+0

这工作!我正在用子查询反思。谢谢。很简单。这导致了下一个问题! – user3813075