2016-08-31 37 views
0

我曾經有一個查詢做了一堆事情,其中​​一個是告訴我有關每個員工的工資增長情況。是否到期?它是否逾期?對一個人來說太早了?如果條件不起作用,MS訪問

查詢不停地問我輸入參數,並問這個問題removing "enter parameter value" in query MS access後,我打破了一個查詢成一束,每個查詢是建立在其他之前,該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,他得到的 24個月後增加了他的最後一個
  • 如果員工的評級是2,他得到一個在12-18 個月
  • 如果員工的評級是1,他得到一個在9-15個月

現在會發生什麼事,是爲一些員工,我只得到一個記錄,它是正確的,但對於一些員工,我得到兩個記錄,其中一個是正確的,另一個不是。現在不是48條記錄(我用來獲取當條件工作得很好),我得到58

這是整個查詢的代碼

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; 

你的幫助深表感謝,請注意我幾乎不知道編碼,只是一直在學習MS Access,謝謝!

+0

有多少行返回DateOfUpdateQ?這兩個查詢都沒有鏈接,這可能會導致記錄重複。 DateOfUpdateQ –

+0

DateOfUpdateQ返回48.如何鏈接查詢? –

+0

使用'JOIN'或只需拖放應在查詢構建器中連接的列。 –

回答

0

查詢中的表格未鏈接。通過拖放鏈接查詢設計器中的相關列,如關係創建