Comment appliquer la condition avant où clause dans CTE

J'ai un problème concernant une requête select, j'utilise CTE pour exécuter une requête, ma requête est comment appliquer une condition dans CTE avant la clause Where ,

Table Temp :

  Id | Title -------------- 1 | ABCD 2 | ABCD 3 | AB 4 | CD 5 | DA Declare @Count int,@search nvarchar(50) Select @search ='AB' set @Count =1 WITH TempResult as ( Select * from Temp ) SELECT * from TempResult 

Maintenant, je veux quand Count = 1 alors Record va chercher sur la base de la variable @search sinon, Canany on m'aider sur ce point mais callbackez-vous que je veux une déclaration conditionnelle au sein du CTE pas côté hors signifie pas de répétition de CTE

Je pense que c'est ce que tu es après:

 WITH TempResult AS ( SELECT * FROM Temp WHERE (@Count<>1 OR Title LIKE '%'+@Search+'%') ) SELECT * FROM TempResult 

Explication:

Les loggings seront filtrés avec Title LIKE '%'+@Search+'%' uniquement lorsque @Count! = 1.

Être plus précis:

Lorsque @Count = 1, il ira pour la deuxième partie de la clause WHERE .

Quand @Count ! = 1, il ne va pas pour la deuxième partie puisque la clause WHERE renvoie true .

Ressemble à

 WITH TempResult as ( Select * from Temp WHERE @count <> 1 OR Title = @Search ) SELECT * from TempResult 

Essayer:

 WITH TempResult as ( SELECT * FROM Temp WHERE @Count=1 AND Title LIKE '%'+@Search+'%' UNION ALL SELECT * FROM Temp WHERE @Count<> 1 ) SELECT * FROM TempResult 

Que dis-tu de ça?

 WITH TempResult as ( SELECT * FROM Temp WHERE (@Count=0) OR (@Count <> 0 AND Title LIKE '%'+@Search+'%') ) SELECT * FROM TempResult