2017-12-29 25 views
-2

이것은 매우 쉽고 간단하게 선택하면 모든 것이 잘 작동하지만 업데이트를 실행하려고하면 오류가 발생합니다. 'CASE 근처에 잘못된 구문이 있습니다'라고 표시됩니다.업데이트가 케이스에서 작동하지 않는 경우 ... Else

Update TBL_FBNK_CURRENCY_HIST 
SET  CURRENCY_FBNK = CURRENCY.Currency_Code, 
      CURRENCY_ASOFDATE = CURRENCY.ASOFDATE, 
      CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVAL_RATE, 
      ORIGINAL_AMOUNT = MM_HIST.PRINCIPAL 
      REPORTABLE_AMOUNT = REVAL_BALANCE 
       CASE WHEN CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT') 
        THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate) 
        ELSE (MM_HIST.PRINCIPAL/CURRENCY.Mid_Reval_Rate) END AS REVAL_BALANCE 
From  TBL_FBNK_CURRENCY_HIST AS CURRENCY INNER JOIN JOIN TBL_MULTI_MM_HIST AS MM_HIST 
      ON CURRENCY.Currency_Code = MM_HIST.Currency 
      AND CURRENCY.ASOFDATE = MM_HIST.ASOFDATE 

여기에 무슨 문제가 있습니까?

+0

'사례'의 결과로 업데이트되는 내용은 무엇입니까? 또한'MM_HIST.PRINCIPAL' 후 쉼표가 누락 된 것으로 나타납니다 – ztaylor54

+3

(1) 쉼표 (2)를 추가하는 것이 지쳤습니까? 그 CASE 표현식의 결과를 할당하려고합니까? –

답변

3

MM_HIST.PRINCIPALREPORTABLE_AMOUNT 사이의 혼수 상태가 누락되어 있고 다른 하나는 REVAL_BALANCECASE 사이입니다. 또한 CASE 문으로 만 값을 반환하지만 아무 것도 지정하지 않습니다.

당신이 REPORTABLE_AMOUNT

Update TBL_FBNK_CURRENCY_HIST 
SET  CURRENCY_FBNK = CURRENCY.Currency_Code, 
      CURRENCY_ASOFDATE = CURRENCY.ASOFDATE, 
      CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVAL_RATE, 
      ORIGINAL_AMOUNT = MM_HIST.PRINCIPAL, 
      REPORTABLE_AMOUNT = CASE WHEN CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT') 
       THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate) 
       ELSE (MM_HIST.PRINCIPAL/CURRENCY.Mid_Reval_Rate) END 
From  TBL_FBNK_CURRENCY_HIST AS CURRENCY INNER JOIN JOIN TBL_MULTI_MM_HIST AS MM_HIST 
      ON CURRENCY.Currency_Code = MM_HIST.Currency 
      AND CURRENCY.ASOFDATE = MM_HIST.ASOFDATE 
+1

'MM_HIST.PRINCIPAL' 다음에 쉼표가 누락되었습니다. – ztaylor54

+0

Ah !! 그게 조쉬 야! 감사. 이제 집에 돌아가 휴식을 취할 시간. 나는 사무실에서 너무 많은 시간이 사람을 일시적으로 바보 같게 만든다. – ryguy72

+0

나는 어떤 종류의 비즈니스 규칙이 통화에 따라 곱셈 대신 나눗셈을 필요로하는지 궁금하다. 일부 통화에 대해 상호 교환 적으로 저장된 전환 계수입니까? – dlatikay

1

전체 CASE...END 형태의 표현에 CASE의 결과를 할당 할 필드 이름으로 가정. 귀하의 실수는 CASE 표현식의 결과에 별명 REVAL_BALANCE를 지정하는 것이므로 선택 사항에서는 의미가 있지만 업데이트에는 의미가 없습니다.

REPORTABLE_AMOUNT = CASE WHEN CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT') 
       THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate) 
       ELSE (MM_HIST.PRINCIPAL/CURRENCY.Mid_Reval_Rate) END 

을 또는 당신은 통화 변환 속도 REVAL_BALANCE를 곱해야 않았다

은 다음과 같이 업데이트에 대한 할당을 사용? 이 경우 곱셈 연산자 (*)를 입력하는 것을 잊어 버렸습니다. 다음과 같을 수 있습니다 :

UPDATE TBL_FBNK_CURRENCY_HIST SET  
    CURRENCY_FBNK = CURRENCY.Currency_Code, 
    CURRENCY_ASOFDATE = CURRENCY.ASOFDATE, 
    CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVAL_RATE, 
    ORIGINAL_AMOUNT = MM_HIST.PRINCIPAL, 
    REPORTABLE_AMOUNT = REVAL_BALANCE * CASE WHEN 
     CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT') 
     THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate) 
     ELSE (MM_HIST.PRINCIPAL/CURRENCY.Mid_Reval_Rate) END 
From TBL_FBNK_CURRENCY_HIST AS CURRENCY 
INNER JOIN JOIN TBL_MULTI_MM_HIST AS MM_HIST ON CURRENCY.Currency_Code = MM_HIST.Currency AND CURRENCY.ASOFDATE = MM_HIST.ASOFDATE 
관련 문제