2017-02-20 3 views
0

アクセスSQLは乗算非修飾スコア - それぞれの人のためにKPI(性能)のスコアを示しています私はMS Accessでテーブルを有する

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スコアは加算と乗算され

上記の例の表では、ユーザー20511のProductivityとCash per Hourの合計が80になり、これには0.9の品質スコアが乗算されます。与える72.

電子xtraの複雑さは、すべてのユーザーに修飾語が付いているわけではないため、この例ではデフォルト修飾子1を使用しています。

これまでのところ私はかなり不器用な感じ、また、修飾スコアが実際に0の場合失敗し、以下のクエリ

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

ここであなただけの各従業員に1つの修飾子を持っている場合、最も簡単なケースのためのソリューションだ、あるいはそこにそれらのいくつかがあり、あなただけランダムに1をピックアップしたい場合

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 
を(私は FIRST()集約関数を使用)

修飾語が複数ある場合は、複雑になります。修飾子は係数であるため、加算する代わりに各従業員に掛ける必要があります。そして、MS Accessには倍増集合関数がありません。しかし、反対数アプローチを使用していくつかの困難を伴って再現することができます。私はこれについて私のコメントに答えなかったので、ここではこれを開発しません。 Check this question: Aggregate multiplicate function

+0

こんにちは@トーマスG.あなたの答えをありがとう。今のところ、従業員一人につき1つの修飾語しかありません。私はあなたのソリューションを使用しようとしましたが、「SELECTステートメントに予約語またはスペルミスまたは不足している引数名が含まれています」というエラーメッセージが表示されます。 – Leroy

+0

ああ、サブクエリのSELECT部分​​の後のカンマだけでした。私は答えを編集し、それは今素晴らしいです。ご協力ありがとうございました! – Leroy

関連する問題