web-dev-qa-db-fra.com

Sql Server union avec condition If

J'ai une requête comme:

DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION 
IF @tmpValue > 0 
SELECT * FROM Animal WHERE.Active = 0

Quand j'utilise comme ça, c'est donner une erreur à cause de la condition if. Je dois utiliser UNION à cause de notre structure.

Comment puis-je l'utiliser avec si condition?

Merci,
John

11
John

Déplacez la condition @tmpValue > 0 vers la clause WHERE comme ceci:

SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0
17
Mahmoud Gamal

Le meilleur moyen de définir la condition dans Query est l'instruction CASE. vous pouvez mettre n'importe quel nombre de condition dans la requête. L'instruction CASE est utilisée pour mettre des filtres conditionnels dans Query.

Pour EX.

DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal 
WHERE 
1 = CASE WHEN @tmpValue  = 0 THEN 0 ELSE Active = 1 END

votre situation n’est pas trop complexe, mais pour des conditions plus complexes, vous pouvez utiliser une instruction CASE imbriquée dans Query.

3
Hiren Dhaduk

Vous pouvez ajouter votre condition à la requête comme ceci. la section section de l'union ne retournera tout simplement aucun résultat si votre condition de test est fausse:

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION 
SELECT * FROM Animal WHERE.Active = 0 and @tmpValue > 0
3
Garvin

Voici une façon de faire qui simplifie le code en se débarrassant complètement de l’UNION. Je préfère toujours une solution plus simple dans la mesure du possible. Cela fonctionnera également mieux si select sélectionne une table, car elle ne l’analysera qu’une fois plutôt que (potentiellement) deux fois.

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change

SELECT * FROM Animal WHERE AniActive = 1 OR @tmpValue > 0
0
Bryan Cooper