2017-10-12 8 views
0

나는이 선에 도달 할 때 작동하지 않는 SQL 서버의 경우 표현이 있습니다SQL 서버 케이스의 발현은 두 번째 조건 작동하지

WHEN cl.Product_Type = 'PerformanceSwap' and 
cl.Underlying_Product_Code_IndexType IS NULL THEN 

코드의 전체 블록은 다음과 같습니다

CASE 
WHEN prod_map.Product_ID1 = 'CR' AND prod_map.Product_Type <> 
'PerformanceSwap' THEN 
--(mandatory for transactions where asset_class = CR) 
    CASE 
    WHEN cl.AB_Payment_Frequency = 'Monthly' THEN 'MNTH' 
    WHEN cl.AB_Payment_Frequency = 'Quarterly' THEN 'QURT' 
    WHEN cl.AB_Payment_Frequency = 'Yearly' THEN 'YEAR' 

     WHEN cl.Product_Type = 'PerformanceSwap' and 
     cl.Underlying_Product_Code_IndexType IS NULL THEN 
      CASE 
      WHEN cl.AB_Finance_Payment_Frequency = 'MNTH' THEN 'MNTH' 
      WHEN cl.AB_Finance_Payment_Frequency = 'SW' THEN 'MIAN' 
      WHEN cl.AB_Finance_Payment_Frequency = 'QTR' THEN 'QURT' 
      WHEN cl.AB_Finance_Payment_Frequency = 'PA' THEN 'YEAR' 
      WHEN cl.AB_Finance_Payment_Frequency = 'ZC' THEN 'YEAR' 
ELSE '' 
END 
END 
END, 

내에서 다른 사례 표현을해야합니까? AB_Finance_Payment_Frequency 값을 올릴 수 있습니다.

+1

달성하려는 결과는 무엇입니까? –

+0

첫 번째 WHEN은 prod_map.Product_Type이 'PerformanceSwap'과 다른지 확인합니다. 따라서 문제가있는 시점에 도달하면 cl.Product_Type이 'PerformanceSwap'값을 유지할 수 있습니까? – GuidoG

답변

2

나는 case표현을 너무 많이 과시했다고 생각합니다.

두 "외부"WHEN 비교 로직은 호환되지 않습니다. Product_Type 로직을 살펴보십시오. 두 번째는 중첩되는 것이 아니라 첫 번째를 따라야합니다.

(CASE WHEN prod_map.Product_ID1 = 'CR' AND prod_map.Product_Type <> 'PerformanceSwap' 
     THEN --(mandatory for transactions where asset_class = CR) 
      (CASE WHEN cl.AB_Payment_Frequency = 'Monthly' THEN 'MNTH' 
        WHEN cl.AB_Payment_Frequency = 'Quarterly' THEN 'QURT' 
        WHEN cl.AB_Payment_Frequency = 'Yearly' THEN 'YEAR' 
      END) 
     WHEN cl.Product_Type = 'PerformanceSwap' and cl.Underlying_Product_Code_IndexType IS NULL 
     THEN (CASE WHEN cl.AB_Finance_Payment_Frequency = 'MNTH' THEN 'MNTH' 
       WHEN cl.AB_Finance_Payment_Frequency = 'SW' THEN 'MIAN' 
       WHEN cl.AB_Finance_Payment_Frequency = 'QTR' THEN 'QURT' 
       WHEN cl.AB_Finance_Payment_Frequency = 'PA' THEN 'YEAR' 
       WHEN cl.AB_Finance_Payment_Frequency = 'ZC' THEN 'YEAR' 
       ELSE '' 
      END) 
END) 

그러나, 당신은 여전히 ​​하나의 ELSE 절을 가지고주의 사항 :

은 당신이 원하는 것을 할 수있다. 나는 당신이 필요로하는 논리가 조금 다를 수 있다고 생각합니다. 그것을 매핑하고 구현해야합니다.

로직을 쉽게 따라갈 수 있도록 코드를 매우 신중하게 들여 쓰는 것이 좋습니다.