2016-09-02 26 views
-2

我遇到了SQL語句正確打開記錄集的問題。我收到一個語法錯誤,說我錯過了一個操作符。這發生在我在CASE語句中添加以試圖獲得大於零的數字的平均值之後。下面是我建立訪問VBA SQL語法錯誤(丟失操作符)

SELECT AVG (([t1].[MET_Value]/147000) * [t1].[LMP]) AS RW, 
        COUNT ([t1].[MetTime]) AS METcnt, 
        AVG ([t1].[MET_Value]/147000) AS AvgCF, 
        AVG(CASE WHEN [t1].[LMP] > 0 THEN ([t1].[MET_Value]/147000) * [t1].[LMP] ELSE NULL END) AS Floor0Avg 
     FROM 
      (SELECT [Data].[Local_Datetime], 
        [Data].[Node_ID], 
        [Data].[LMP], 
        [Data].[5810] AS MET_Value, 
        [MetData].[Local_Datetime] AS MetTime 
      FROM [Data] INNER JOIN 
        [MetData] ON [Data].[Local_Datetime] LIKE [MetData].[Local_Datetime] 
      WHERE [Node_ID] = 746200 AND [LMP] <> -999999 AND [Data].[Local_Datetime] BETWEEN #9/2/2015# AND #9/1/2016#) 
     as t1 GROUP BY Node_ID; 

這工作的SQL字符串,如果我拿出AVG(CASE WHEN ..),但我似乎無法得到它與它,所以我假定這是工作的地方問題是。

我一直試圖讓這個工作,但無法找到什麼是錯的。如果您看到我的錯誤,請告訴我。

回答

0

請嘗試更換此行,如果它正在通過從代碼中刪除此行。

AVG(CASE WHEN [t1].[LMP] > 0 THEN (([t1].[MET_Value]/147000) * [t1].[LMP]) ELSE NULL END) AS Floor0Avg 
+0

'Case'在MS Access中不可用。你需要使用'Switch' –

0

Ryan W明白了。 已換

AVG(CASE WHEN [t1].[LMP] > 0 THEN ([t1].[MET_Value]/147000) * [t1].[LMP] ELSE NULL END) AS Floor0Avg 

AVG(Switch([t1].[LMP] > 0,([t1].[MET_Value]/147000)*[t1].[LMP])) AS Floor0Avg 

,它似乎是工作。