2016-08-31 18 views
0

私は以前はたくさんのことをするクエリを持っていましたが、そのうちの1つは各従業員の給与の増加について教えています。それは期日ですか?それは延滞ですか?それは早すぎるのですか?MSアクセスの条件が満たされない場合

質問は、パラメータを入力するように依頼した後、この質問をした後removing "enter parameter value" in query MS access私は束に1つのクエリを壊した、各クエリは、if条件を持つ最後のものまで他のビルド。 すべてがあれば条件を除いて、まさに私がそれを望むように働いていた(前に正常に動作するために使用!!!)

をこれは私の昇給のための条件

Eligibility: IIf([MonthsSinceLastIncrease] < 24, IIf([MonthsSinceLastIncrease] >= 18 
     AND [LastOfRatings] <= 2, "OVERDUE", IIf([MonthsSinceLastIncrease] >= 15 
      AND [LastOfRatings] = 1, "OVERDUE", IIf([MonthsSinceLastIncrease] >= 9 
       AND [MonthsSinceLastIncrease] < 15 
       AND [LastOfRatings] = 1, "Eligible", IIf([MonthsSinceLastIncrease] >= 12 
        AND [MonthsSinceLastIncrease] < 18 
        AND [LastOfRatings] = 2, "Eligible", "ok")))), "OVERDUE") 

ルールがようであれば次の:

  • 従業員の評価は3であれば、彼は 彼の最後の1
  • の24ヶ月後に増加を取得し、従業員の評価は2であるならば、彼は12-18の1を取得ヶ月
  • 従業員の評価は1であるならば、彼は、今、何が起こる9-15ヶ月

に1を取得した従業員のいくつかのために、私は1つのレコードだけを取得し、それが正しいのですが、いくつかのためということです従業員、私は2つのレコードを取得し、それらのうちの1つは正しいものであり、他のものは正しくありません。今の代わりに、48回の記録(私は条件がうまく働いたときに取得するために使用したもの)、私はこれは

あなたの助けがはるかに高く評価されて
SELECT IIf([MonthsSinceLastIncrease] < 24, IIf([MonthsSinceLastIncrease] >= 18 
      AND [LastOfRatings] <= 2, "OVERDUE", IIf([MonthsSinceLastIncrease] >= 15 
       AND [LastOfRatings] = 1, "OVERDUE", IIf([MonthsSinceLastIncrease] >= 9 
        AND [MonthsSinceLastIncrease] < 15 
        AND [LastOfRatings] = 1, "Eligible", IIf([MonthsSinceLastIncrease] >= 12 
         AND [MonthsSinceLastIncrease] < 18 
         AND [LastOfRatings] = 2, "Eligible", "ok")))), "OVERDUE") AS Eligibility 
    ,MonthsSinceLastUpdateQ.LocalID 
    ,MonthsSinceLastUpdateQ.LastOfRatings 
    ,MonthsSinceLastUpdateQ.MaxOfDateOfUpdate 
    ,MonthsSinceLastUpdateQ.MonthsSinceLastIncrease 
FROM MonthsSinceLastUpdateQ 
    ,DateOfUpdateQ 
GROUP BY IIf([MonthsSinceLastIncrease] < 24, IIf([MonthsSinceLastIncrease] >= 18 
      AND [LastOfRatings] <= 2, "OVERDUE", IIf([MonthsSinceLastIncrease] >= 15 
       AND [LastOfRatings] = 1, "OVERDUE", IIf([MonthsSinceLastIncrease] >= 9 
        AND [MonthsSinceLastIncrease] < 15 
        AND [LastOfRatings] = 1, "Eligible", IIf([MonthsSinceLastIncrease] >= 12 
         AND [MonthsSinceLastIncrease] < 18 
         AND [LastOfRatings] = 2, "Eligible", "ok")))), "OVERDUE") 
    ,MonthsSinceLastUpdateQ.LocalID 
    ,MonthsSinceLastUpdateQ.LastOfRatings 
    ,MonthsSinceLastUpdateQ.MaxOfDateOfUpdate 
    ,MonthsSinceLastUpdateQ.MonthsSinceLastIncrease; 

、ということに注意してください全体のクエリのコードは58

取得私は間違いなくコーディングを知っていて、私が行くようにMS Accessを学んでいただけであり、ありがとう!

+0

DateOfUpdateQを返す行の数はいくつですか?どちらのクエリもリンクされていないため、レコードが重複する可能性があります。 DateOfUpdateQ –

+0

DateOfUpdateQは48を返します。どのようにクエリをリンクしますか? –

+0

'JOIN'を使うか、単にクエリービルダーで結合する必要があるカラムをドラッグ&ドロップします。 –

答えて

0

クエリのテーブルはリンクされていません。リレーションシップの作成のような、ドラッグアンドドロップによるクエリデザイナーの関連する列のリンク

関連する問題