2013-05-29 52 views
0

我在嘗試IIF語句時無法獲得Where語句的工作。我已經嘗試了幾個變種的SQL無濟於事。我想要做的是計數假期直到某個日期收益。當我單獨使用我的Between語句時,它工作正常。當系統時鐘超過5-20-13後,當我嘗試重置計數器時,如果它剛剛通過的陣亡將士紀念日假期顯示1,則不返回結果。我無法弄清楚正確的語法代碼段上是WHERE集成了IIF的sql

WHERE (((SchedulingLog.EventDate)=IIf(Date()>DateSerial(Year(Date()),5,20),((SchedulingLog.EventDate) Between DateSerial(Year(Date()),5,20) And DateSerial(Year(Date())+1,5,20)),((SchedulingLog.EventDate) Between DateSerial(Year(Date())-1,5,20) And DateSerial(Year(Date()),5,20))))) 

下面是我的整個sql。

SELECT Roster.UserID, SchedulingLog.Category, 
Sum(IIf([CatDetail] Like '*Gain*',[Value],0)) AS Gain, DateSerial(Year(Date()),5,20) AS ResetDate, Date() AS [Date] 
FROM SchedulingLog INNER JOIN Roster ON SchedulingLog.UserID = Roster.UserID 
WHERE (((SchedulingLog.EventDate)=IIf(Date()>DateSerial(Year(Date()),5,20),((SchedulingLog.EventDate) Between DateSerial(Year(Date()),5,20) And DateSerial(Year(Date())+1,5,20)),((SchedulingLog.EventDate) Between DateSerial(Year(Date())-1,5,20) And DateSerial(Year(Date()),5,20))))) 
GROUP BY Roster.UserID, SchedulingLog.Category, DateSerial(Year(Date()),5,20), Date() 
HAVING (((SchedulingLog.Category) Like "DH*" Or (SchedulingLog.Category) Like "Comp*")); 

任何援助將不勝感激。

回答

2

我相信問題是雙重的,首先你要找你的DATE = BETWEEN日期和日期。不知道這是否是Access中的問題,語法通常是WHERE日期BETWEEN日期和日期。 第二個問題是試圖在IIF語句中返回一個命令,而不是返回要由BETWEEN語句評估的值。

我認爲這應該工作:

SELECT Roster.UserID, SchedulingLog.Category, 
Sum(IIf([CatDetail] Like '*Gain*',[Value],0)) AS Gain, DateSerial(Year(Date()),5,20) AS ResetDate, Date() AS [Date] 
FROM SchedulingLog INNER JOIN Roster ON SchedulingLog.UserID = Roster.UserID 
WHERE SchedulingLog.EventDate BETWEEN IIf(Date()>DateSerial(Year(Date()),5,20) 
               ,DateSerial(Year(Date()),5,20) 
               ,DateSerial(Year(Date())-1,5,20)) 
          AND IIf(Date()>DateSerial(Year(Date()),5,20) 
               ,DateSerial(Year(Date())+1,5,20) 
               ,DateSerial(Year(Date()),5,20)) 
GROUP BY Roster.UserID, SchedulingLog.Category, DateSerial(Year(Date()),5,20), Date() 
HAVING (((SchedulingLog.Category) Like "DH*" Or (SchedulingLog.Category) Like "Comp*")); 
+0

完美地工作!所以如果我正在閱讀這個權利,關鍵是使用Where子句時的AND If語句? –

+1

BETWEEN需要一個VALUE,其次是AND,然後是另一個VALUE,IIF語句只能返回一個值,它們不能返回AND運算符。 –