Domanda

Ho la seguente query:

DECLARE @IsStocked bit
SELECT * FROM Products p WHERE p.LastSeen >  GETDATE() - 30 

Questo restituisce tutti Prodotti che ha visto, negli ultimi 30 giorni.

La mia domanda è, io vorrei che i p.LastSeen > GETDATE() - 30 la clausola si applicano solo quando @IsStocked = true.

Questo è parte di un più ampio query, e mi piacerebbe raggiungere questo senza l'utilizzo di IF/ELSE (es.se @IsStocked = false il p.LastSeen > GETDATE() - 30 sezione della clausola WHERE viene completamente ignorata).

Grazie!

È stato utile?

Soluzione

DECLARE @IsStocked bit

SELECT * FROM Products p
WHERE  @IsStocked = 0 OR (p.LastSeen > GETDATE() - 30);

Altri suggerimenti

DECLARE @IsStocked bit;

SELECT * 
FROM Products p
WHERE (@IsStocked = 1 AND p.LastSeen > GETDATE() - 30) 
OR     @IsStocked = 0;

Qui è la mia Query in base alla tua domanda

DECLARE @IsStocked bit
Set @IsStocked=1
Select * from Product
Where LastSeen  = Case When (@IsStocked=1) THEN GETDATE() - 30 
                   Else LastSeen  END

spero che sarà di aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top