我在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,那么感觉非常笨拙也会失败。有更简单的方法吗?
答案 0 :(得分:1)
这是最简单案例的解决方案,当你每个员工只有一个修饰符,或者如果有几个修饰符而你只想随机拿一个(我使用$hash = (int)$_POST['hash'];
聚合功能)
FIRST()
如果你有几个修饰符,那就变得复杂了。因为您的修饰符是系数,所以应该为每个员工乘以而不是求和。并且MS Access没有乘法聚合函数。然而,使用反对数方法可以在某些困难下复制它。我不会在这里开发这个,因为你还没有回答我对此的评论。 Check this question: Aggregate multiplicate function