Cas avec plusieurs conditions

14

J'ai besoin de modifier la valeur retournée, à partir de l'instruction select, en fonction de plusieurs conditions. J'ai essayé quelque chose comme ça:

,CASE i.DocValue
  WHEN 'F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal
  ELSE 0
END as Value

pourquoi cela ne fonctionne pas et quelle est la méthode recommandée pour le faire? Il y aura ensuite plusieurs conditions QUAND.

Je vous remercie

Muflix
la source

Réponses:

25
,CASE WHEN i.DocValue ='F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal
  ELSE 0
END as Value

Il existe deux types d' CASEinstructions, SIMPLE et SEARCHED .

Vous ne pouvez pas évaluer plusieurs expressions dans une expression de cas simple, ce que vous tentiez de faire.

-- Simple CASE expression: 
CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
-- Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

Exemple de CAS simple:

CASE x
  WHEN 'a' THEN 'b'
  WHEN 'c' THEN 'd'
  ELSE 'z'
END

Exemple de CAS recherché:

CASE 
  WHEN x = 1 AND y = 2 THEN 'a'
  WHEN x = 2 AND y = 1 THEN 'b'
  ELSE 'z'
END

Lectures complémentaires: http://msdn.microsoft.com/en-us/library/ms181765.aspx

Mark Sinkinson
la source
1

Vous pouvez également écrire comme celui-ci si vous avez plusieurs exigences:

CASE WHEN CITY='HYDERABAD' THEN       
 CASE WHEN AREA='BHILL' THEN PIN='12345'      
 WHEN AREA='DSNR' THEN PIN='67890'          
 ELSE '33333'          
 END           
END AS PIN_COD
Ramesh Jalla
la source
vous avez raison, le cas emboîté pour les conditions complexes fonctionne aussi :)
Muflix