2016-09-02 4 views
-2

레코드 집합을 올바르게 열려면 SQL 문을 가져 오는 데 문제가 있습니다. 내가 연산자가 누락되었다는 구문 오류가 나타납니다. 이것은 CASE 문을 추가하여 0보다 큰 숫자에 대해서만 평균을 얻으려고 할 때 일어납니다. 나는 (CASE ...)를 AVG를 꺼내하지만 그것이 내가 그 곳이다 가정하고 작업을 얻을 수가없는 경우 아래 나는이 작동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의 문자열입니다 문제는.

나는 이것을 작동 시키려고 노력했지만 잘못된 것을 발견하지 못했다. 제 실수가 있으면 알려주세요.

답변

0

코드에서 제거하여 작동하는 경우이 줄을 바꾸어 사용해보십시오.

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

MS Access에서 '사례'를 사용할 수 없습니다. 당신은'Switch'를 사용해야합니다. –

0

Ryan W got it. 는

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

에 대한

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

를 스왑 그것은 작동하는이 나타납니다.

관련 문제