访问VBA SQL语法错误(缺少运算符)

时间:2016-09-02 14:41:17

标签: sql ms-access

我在获取SQL语句以正确打开记录集时遇到问题。我收到一个语法错误,说我错过了一个运算符。这是在我在CASE语句中添加以尝试仅获得大于零的数字的平均值之后发生的。下面是我正在构建的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;

如果我取出AVG(CASE WHEN ..),但是我似乎无法使用它,所以我认为这就是问题所在。

我一直试图让这个工作,但找不到有什么问题。如果你看到我的错误,请告诉我。

2 个答案:

答案 0 :(得分:0)

请尝试通过从代码中删除此行来替换此行。

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

答案 1 :(得分: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

它似乎正在发挥作用。