2017-10-12 22 views
0

J'ai expression de cas du serveur SQL qui ne semble pas fonctionner quand il arrive à cette ligne:Expression de cas SQL Server ne fonctionne pas avec deuxième condition

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

Le bloc complet de code est:

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, 

Ai-je besoin de faire une autre expression dans ce cas? ou quelque chose d'autre afin qu'il puisse augmenter les valeurs AB_Finance_Payment_Frequency.

+1

quels résultats essayez-vous d'atteindre? –

+0

le premier WHEN s'assure que prod_map.Product_Type diffère de 'PerformanceSwap'. Donc, quand vous atteignez le QUAND vous dites avoir des problèmes, êtes-vous sûr que cl.Product_Type peut contenir la valeur 'PerformanceSwap'? – GuidoG

Répondre

2

Je suppose que vous êtes sur le caseexpressions.

La logique pour les deux comparaisons «externes» WHEN est incompatible - il suffit de regarder la logique Product_Type. Le second devrait suivre le premier plutôt que d'être imbriqué.

Cela peut être ce que vous voulez:

(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) 

Cependant, je remarque que vous avez encore une seule clause ELSE. Je soupçonne que la logique dont vous avez besoin pourrait être un peu différente. Vous devez le mapper et ensuite l'implémenter.

Je vous encouragerais également à indenter le code très attentivement afin que vous puissiez facilement suivre la logique.