通过修饰符得分乘以非修饰符得分 - 访问SQL

时间:2017-02-20 10:35:36

标签: sql ms-access jet

我在MS Access中有一个表,其中列出了每个人的KPI(性能)分数

USERID  KPI            SCORE  MODIFIER
20511   Productivity   50     False
20511   Cash per Hour  30     False
20511   Quality        0.9    True
21320   Productivity   60     False
21320   Cash per Hour  45     False

将非修饰符KPI分数加在一起并乘以修饰符分数(修饰符标记为真的任何KPI)

因此,在上面的示例表中,用户20511的生产率和每小时现金分数总和为80,这将乘以质量得分0.9得到72.

一个额外的复杂因素是并非所有用户都有修饰符,所以在这种情况下我一直使用默认修饰符1。

到目前为止,我已经提出了以下问题

SELECT 
[userID], 
sum(IIF(Modifier = 0,([Score]),0)) AS summedScore, 
IIF(sum(iif(Modifier = 1,([Score]),0))=0,1,sum(iif(Modifier = 1,([Score]),0))) as modifierScore, 
summedScore * modifierScore as finalScore
FROM tbl_KPIScores
GROUP BY UserID

如果修饰符分数实际为0,那么感觉非常笨拙也会失败。有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

这是最简单案例的解决方案,当你每个员工只有一个修饰符,或者如果有几个修饰符而你只想随机拿一个(我使用$hash = (int)$_POST['hash'];聚合功能)

FIRST()

如果你有几个修饰符,那就变得复杂了。因为您的修饰符是系数,所以应该为每个员工乘以而不是求和。并且MS Access没有乘法聚合函数。然而,使用反对数方法可以在某些困难下复制它。我不会在这里开发这个,因为你还没有回答我对此的评论。 Check this question: Aggregate multiplicate function