Tengo la siguiente consulta:

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

Este devuelve todos los Productos que se han visto en los últimos 30 días.

Mi pregunta es, me gustaría que la p.LastSeen > GETDATE() - 30 cláusula sólo se aplicará cuando @IsStocked = true.

Esto es parte de una amplia consulta, y me gustaría lograr esto sin el uso de IF/ELSE (es decir, si @IsStocked = false la p.LastSeen > GETDATE() - 30 sección de la cláusula where se ignora completamente).

Gracias!

  • por qué no y desea utilizar un IF/ELSE? La otra alternativa podría dar lugar a un incorrectamente caché del plan de consulta….
  • por simplicidad, en realidad – hay alrededor de 10 variables en el procedimiento almacenado, todo lo cual puede ser true/false o null a menos que hay una manera que usted puede sugerir que no va a resultar en un IF/ELSE para cada uno de ellos? gracias!
InformationsquelleAutor db1234 | 2009-09-20

3 Comentarios

  1. 4
    DECLARE @IsStocked bit;
    
    SELECT * 
    FROM Products p
    WHERE (@IsStocked = 1 AND p.LastSeen > GETDATE() - 30) 
    OR     @IsStocked = 0;
    • su lógica se puede simplificar un poco…
    • excelente, gracias por su ayuda!
    • Son las 6:30 de la mañana y yo no puedo volver a dormir. Dame un descanso, hombre! 😉
  2. 1

    Aquí está mi Consulta de acuerdo a su pregunta

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

    la esperanza de que le ayudará.

Dejar respuesta

Please enter your comment!
Please enter your name here