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