将非修饰符分数乘以修饰符分数 - 访问 SQL
Multiply non-modifier scores by modifier score - Access SQL
我在 MS Access 中有一个 table,其中列出了每个人的 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)
因此,在上面的示例 table 中,用户 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,也会失败。有更简单的方法吗?
这是最简单情况的解决方案,当每个员工只有一个修改器,或者如果有多个修改器并且您只想随机选择一个(我使用 FIRST()
聚合函数)
SELECT
T.userID, T.summedScore, Tmod.modif AS modifier, (T.summedScore * NZ(Tmod.modif,1)) AS finalscore
FROM
(
SELECT [userID], sum([score]) AS summedScore
FROM tbl_KPIScores
WHERE Modifier=False
GROUP BY UserID
) AS T
LEFT JOIN
(
SELECT userID, FIRST([score]) AS modif
FROM tbl_KPIScores
WHERE Modifier=True
GROUP BY UserID
) AS Tmod ON T.userID=Tmod.userID
如果你有多个修饰符,那就变得复杂了。因为你的修饰符是一个系数,所以它应该为每个员工相乘而不是相加。并且 MS Access 没有乘法聚合函数。但是,使用反对数方法可以复制它,但有一些困难。我不会在这里开发这个,因为你还没有回答我对此的评论。
Check this question: Aggregate multiplicate function
我在 MS Access 中有一个 table,其中列出了每个人的 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)
因此,在上面的示例 table 中,用户 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,也会失败。有更简单的方法吗?
这是最简单情况的解决方案,当每个员工只有一个修改器,或者如果有多个修改器并且您只想随机选择一个(我使用 FIRST()
聚合函数)
SELECT
T.userID, T.summedScore, Tmod.modif AS modifier, (T.summedScore * NZ(Tmod.modif,1)) AS finalscore
FROM
(
SELECT [userID], sum([score]) AS summedScore
FROM tbl_KPIScores
WHERE Modifier=False
GROUP BY UserID
) AS T
LEFT JOIN
(
SELECT userID, FIRST([score]) AS modif
FROM tbl_KPIScores
WHERE Modifier=True
GROUP BY UserID
) AS Tmod ON T.userID=Tmod.userID
如果你有多个修饰符,那就变得复杂了。因为你的修饰符是一个系数,所以它应该为每个员工相乘而不是相加。并且 MS Access 没有乘法聚合函数。但是,使用反对数方法可以复制它,但有一些困难。我不会在这里开发这个,因为你还没有回答我对此的评论。 Check this question: Aggregate multiplicate function