2017-09-28 7 views
0

que je dois faire quelque chose comme ça:cas du serveur SQL pour détecter une condition égale ou non (mutuellement exclusifs)

select * from table1 where type case @param when 1 then EQUAL else NOT EQUAL end 3 

tout sélectionner pour le type = 3 ou pour le type <> 3, en fonction param. Considere une grande sélection impliquant un grand nombre de tables .... L'idée est pas copier même sélectionner des deux côtés de « UNION »

select * from table1 where type = 3 and @param =1 
UNION 
select * from table1 where type <> 3 and @param <> 1 

Est-il possible?

+0

pouvez-vous donner quelques exemples de données et le résultat attendu – GuidoG

Répondre

0

Peut-être que quelque chose comme ça?

select * 
from table1 
where 
    ((@param=1) and (type=3)) 
or 
    ((@param<>1) and (type<>3)) 
0
SELECT * 
FROM table1 
WHERE 
    type = 3 AND @param = 1 
    OR type <> 3 AND @param <> 1 

Utilisez SELECT DISTINCT * si vous avez besoin d'un jeu de résultats sans doublons.

+0

cela ne fonctionnera pas sans parenthèse, et (je pense) DISTINCT n'est pas nécessaire – MtwStark

+0

Cela fonctionnera très bien sans parenthèses, et 'DISTINCT' est de refléter l'utilisation de' UNION' dans la question, même si je ne peux pas dire si c'est une exigence. –

+0

Je pense que OP n'est pas conscient de la différence entre UNION et UNION ALL, et le mélange ET/OU sans parenthèse conduira à des résultats non désirés, dans ce cas résultat tous les enregistrements seront retournés ou peut-être aucun – MtwStark