2013-07-02 1 views
1

"USERDATE"라는 사용자 정의 날짜를 기준으로 사용할 가격을 결정하는 쿼리를 작성하고 있습니다. 이걸 실행하면 "표현식에 구문 오류 (누락 된 연산자)"가 표시됩니다. 내가 선택한 가격은 나중에 쿼리에서 사용되는 "UNIT_AMT"입니다.SQL/MS 액세스 -이 CASE가 작동하지 않는 이유는 무엇입니까?

SELECT MDDB.NDC, CARRIER.GROUP_ID, [USERDATE] AS USERDATE, MDDB.CODE, CARRIER.DUR_MU_R, CARRIER.FEE_BR, CARRIER.FEE_GR, CARRIER.AWP_BR, CARRIER.AWP_GR, CARRIER.DUR_MU_M, CARRIER.FEE_BM, CARRIER.FEE_GM, CARRIER.AWP_BM, CARRIER.AWP_GM, MDDB.AWP_UNIT_AMT, 

CASE 
WHEN USERDATE >= AWP_EFF_DATE THEN AWP_UNIT_AMT 
WHEN USERDATE >= AWP_1ST_OLDEST_EFF_DATE AND USERDATE < AWP_EFF_DATE THEN AWP_1ST_OLDEST_UNIT_AMT 
WHEN USERDATE >= AWP_2ND_OLDEST_UNIT_AMT AND USERDATE < AWP_1ST_OLDEST_UNIT_AMT THEN AWP_2ND_OLDEST_UNIT_AMT 
WHEN USERDATE >= AWP_3RD_OLDEST_UNIT_AMT AND USERDATE < AWP_2ND_OLDEST_UNIT_AMT THEN AWP_3RD_OLDEST_UNIT_AMT 
WHEN USERDATE >= AWP_4TH_OLDEST_UNIT_AMT AND USERDATE < AWP_3RD_OLDEST_UNIT_AMT THEN AWP_4TH_OLDEST_UNIT_AMT 
WHEN USERDATE >= AWP_5TH_OLDEST_UNIT_AMT AND USERDATE < AWP_4ST_OLDEST_UNIT_AMT THEN AWP_5TH_OLDEST_UNIT_AMT 
ELSE AWP_UNIT_AMT 
END AS UNIT_AMT, 

((([UNIT_AMT]*[QTY])*((100+[AWP_GR])/100))+[DUR_MU_R]+[FEE_GR]) AS [GR PRICE], 
((([UNIT_AMT]*[QTY])*((100+[AWP_BR])/100))+[DUR_MU_R]+[FEE_BR]) AS [BR PRICE], 
((([UNIT_AMT]*[QTY])*((100+[AWP_GM])/100))+[DUR_MU_M]+[FEE_GM]) AS [GM PRICE], 
((([UNIT_AMT]*[QTY])*((100+[AWP_BM])/100))+[DUR_MU_M]+[FEE_BM]) AS [BM PRICE] 
FROM MDDB_MASTER AS MDDB, CARRIER_GROUP AS CARRIER 
WHERE (((MDDB.NDC)="41520091574") AND ((CARRIER.GROUP_ID)="709608")); 

감사합니다.

+1

MS 액세스 CASE 표현식이없는, 당신은 [IIF()] (http://www.techonthenet.com/access/functions/advanced/iif.php) 함수를 사용하여 볼 필요가 . – Taryn

+0

잘 설명하면 :) –

답변

2

Access SQL은 CASE ... WHEN을 지원하지 않으므로 중첩 된 IIf() 식을 사용할 수 있습니다. 그러나 매우 많은 조건에서 중첩 된 IIf()은 어려울 것입니다. 이 경우에는 Switch()가 더 편리 할 수 ​​있습니다.

Switch(
    USERDATE >= AWP_EFF_DATE, AWP_UNIT_AMT, 
    USERDATE >= AWP_1ST_OLDEST_EFF_DATE AND USERDATE < AWP_EFF_DATE, AWP_1ST_OLDEST_UNIT_AMT, 
    USERDATE >= AWP_2ND_OLDEST_UNIT_AMT AND USERDATE < AWP_1ST_OLDEST_UNIT_AMT, AWP_2ND_OLDEST_UNIT_AMT, 
    USERDATE >= AWP_3RD_OLDEST_UNIT_AMT AND USERDATE < AWP_2ND_OLDEST_UNIT_AMT, AWP_3RD_OLDEST_UNIT_AMT, 
    USERDATE >= AWP_4TH_OLDEST_UNIT_AMT AND USERDATE < AWP_3RD_OLDEST_UNIT_AMT, AWP_4TH_OLDEST_UNIT_AMT, 
    USERDATE >= AWP_5TH_OLDEST_UNIT_AMT AND USERDATE < AWP_4ST_OLDEST_UNIT_AMT, AWP_5TH_OLDEST_UNIT_AMT, 
    True, AWP_UNIT_AMT 
) AS UNIT_AMT 
+0

HansUp! 언제나처럼, 당신은 나와 함께합니다! –

+0

실제로 쿼리 결과에서 "UNIT_AMT"는 #Error로 표시됩니다. ( –

+2

그들은 모두 날짜/시간 유형입니다. 나는 [USERDATE] AS USERDATE'에 오타가 있습니다. –

관련 문제