Sql 向相关子查询添加计数器

Sql 向相关子查询添加计数器,sql,ms-access,counter,correlated-subquery,cumulative-sum,Sql,Ms Access,Counter,Correlated Subquery,Cumulative Sum,我在Access中有一个相关的子查询,它获取每个被评估人的评分的运行总数。我想知道如何插入一个计数器来跟踪有多少记录被添加到跑步总数中,这样我就可以通过计算跑步总数/计数来计算每个人的平均评分。对于一个更有经验的人来说,这可能非常简单,但我还没有成功地让它工作起来,可以使用任何可用的帮助来加快我的工作进度。以下是我目前的代码: SELECT FieldEval1.EvaluateeID, FieldEval1.EvalDate, FieldEval1.EvalSkillVal, FieldEva

我在Access中有一个相关的子查询,它获取每个被评估人的评分的运行总数。我想知道如何插入一个计数器来跟踪有多少记录被添加到跑步总数中,这样我就可以通过计算跑步总数/计数来计算每个人的平均评分。对于一个更有经验的人来说,这可能非常简单,但我还没有成功地让它工作起来,可以使用任何可用的帮助来加快我的工作进度。以下是我目前的代码:

SELECT FieldEval1.EvaluateeID, FieldEval1.EvalDate, FieldEval1.EvalSkillVal, FieldEval1.EvalSkillVal, 
  (SELECT Sum(FieldEval2.EvalSkillVal) 
   FROM FieldEvaluations AS FieldEval2 
   WHERE FieldEval2.EvaluateeID = FieldEval1.EvaluateeID AND FieldEval2.EvalDate <= FieldEval1.EvalDate) AS SkillTotal
FROM FieldEvaluations AS FieldEval1;

到目前为止,我所做的工作是为每个人创建运行总数。

我不使用子查询作为列来编写SQL。使用联接通常更清晰、更标准。带着解释


一旦您使用该表单进行了小于比较和分组,运行总计就变得非常简单

在得到其他人的帮助以澄清我的问题以及我需要获得什么结果后,我想出了以下代码:

SELECT FieldEval1.EvaluateeID, FieldEval1.EvalDate, FieldEval1.EvalSkillVal, 
  (SELECT Avg(FieldEval2.EvalSkillVal) 
   FROM FieldEvaluations AS FieldEval2 
   WHERE ((FieldEval2.EvalSkillVal)>0) AND FieldEval2.EvaluateeID = FieldEval1.EvaluateeID AND FieldEval2.EvalDate <= FieldEval1.EvalDate) AS SkillAvg 
FROM FieldEvaluations AS FieldEval1 
WHERE (((FieldEval1.EvalSkillVal)>0));

此代码将为我提供每个人的平均评分,同时忽略值为零的记录。零表示未对该类别中的该人员执行评分

请先检查语法,子查询前缺少逗号。我希望能够设置统计记录的参数。我的老板允许进行评估的人员输入1-5或留空-值为零表示他们留空。如果添加到运行总数中的值为零,则意味着没有对某个人进行评估,因此我不想在计算平均值时计算该记录。也许我可以指定子查询AvgEvalSkillVal的参数来完成同样的事情?谢谢你的帮助。因为我的办公室关门了,把我赶了出去,所以我必须在早上再把它捡起来。我觉得答案很接近,明天会更新@HansUp-这是我在您的帮助下进行头脑风暴后得出的代码,它似乎正在工作。选择FieldEval1.EvaluateId、FieldEval1.EvalDate、FieldEval1.EvalSkillVal,从FieldEvaluations中选择AvgFieldEval2.EvalSkillVal作为FieldEval2,其中FieldEval2.EvalSkillVal>0,FieldEval2.EvaluateId=FieldEval1.EvaluateId和FieldEval2.EvalDate为0;我不知道如何发布示例数据,但如果您感兴趣,我可以尝试找出答案,以便您可以查看原始数据与结果的对比。感谢您分享此信息。我打算研究一段时间,因为现在它看起来很吓人;希望在我花更多的时间查看之后,它更有意义。