2010-04-09 13 views
0

Je dois obtenir une clause WHERE pour évaluer uniquement certaines instructions. quelque chose comme:SQL - Évaluer conditionnellement les clauses WHERE

WHERE field_a = field_b AND 
    (CASE WHEN <PARAM>type</PARAM> = 5 
     THEN {field_c = 1 OR field_c = 2} 
     WHEN <PARAM>type</PARAM> = 6 
     THEN {field_c = 3 OR field_c = 4} 
     ELSE field_c = <PARAM>type</PARAM> 

de sorte que lorsque le type de paramètre = 5, il vérifie seulement si field_c = 1 ou 2. Des pensées?

Répondre

0
WHERE field_a = field_b 
AND (
    (type = 5 AND (field_c = 1 OR field_c = 2)) 
    OR (type = 6 AND (field_c = 3 OR field_c = 4)) 
    OR field_c = type 
) 

Est-ce ce que vous recherchez?

+0

Il pourrait être plus clair si vous avez utilisé "(field_c in (1,2))" et sur la ligne suivante "(field_c in (3,4))" – MJB

3
WHERE 
((field_a = field_b)) AND 
(((<PARAM>type</PARAM> = 5) AND (field_c IN (1, 2))) OR 
((<PARAM>type</PARAM> = 6) AND (field_c IN (3, 4))) OR 
((<PARAM>type</PARAM> NOT IN (5, 6) AND <PARAM>type</PARAM> = field_c))) 
0

Est-ce que cela fait?

Where field_a = field_b AND 
(
    (<PARAM>type</PARAM> = 5 AND field_c IN (1,2)) 
    OR (<PARAM>type</PARAM> = 6 AND field_c IN (1,2)) 
    OR (field_c = <PARAM>type</PARAM>) 
) 
0

Voici ce que j'ai trouvé, après m'être inspiré des articles, j'ai réalisé que je n'avais pas besoin d'un tel code conditionnel. En outre, le type de paramètre a la capacité d'accepter plusieurs valeurs, et les sort séparées par des virgules, ce qui aide grandement.

WHERE field_a = field_b AND 
    (field_c in (<PARAM>type</PARAM>)) 

Merci pour l'aide!

0
WHERE field_a = field_b AND 
     CASE WHEN <PARAM>type</PARAM> = 5 THEN 
       CASE WHEN field_c = 1 OR field_c = 2 THEN 1 ELSE 0 END 
      WHEN <PARAM>type</PARAM> = 6 THEN 
       CASE WHEN field_c = 3 OR field_c = 4 THEN 1 ELSE 0 END 
      ELSE 
       CASE WHEN field_c = <PARAM>type</PARAM> THEN 1 ELSE 0 END 
     END = 1