2016-12-28 87 views
2

我創建具有參數的過程和基於參數我必須把在where子句例如不同的過濾器子句是記錄:取在不同情況下

@para1 
as 

    Select a,b,c from z 
     where @para1 = 0 then a = a 
      and @para1 = 1 then a between 1 to 10 
      and @para1 = 2 then a between 11 and 20 
+1

標記您正在使用的dbms。該代碼遠離ANSI SQL兼容。 – jarlh

回答

2

你可以做圍繞這些方針的東西。下面像CASE

Select a,b,c 
from z 
where (@para1 = 0 AND A = A) -- A=A condition is pointless though 
    OR (@para1 = 1 AND a between 1 and 10) 
    OR (@para1 = 2 AND a between 11 and 20) 
3

ANDOR作品組合使用AND/OR邏輯

SELECT a,b,c 
FROM z 
WHERE @para1 = 0 -- to pull all records when @para1 = 0 
     OR (@para1 = 1 
      AND a BETWEEN 1 AND 10) -- To pull records BETWEEN 1 AND 10 when @para1 = 1 
     OR (@para1 = 2 
      AND a BETWEEN 11 AND 20) -- To pull records BETWEEN 11 AND 20 when @para1 = 2 
1

試試這個mehtod:

DECLARE @Cond AS NVARCHAR(1000) 
if @para1 = 0 
    SET @Cond = ' a = a' 
else if @para1 = 1 
    SET @Cond = ' a between 1 and 10' 
else if @para1 = 2 
    SET @Cond = ' a between 11 and 20' 

EXEC('Select a,b,c from z where ' + @Cond) 
0

你可以試試這個

if(@para1=0) 
Begin 
---- 
End 
if(@para1=1) 
Begin 
---- 
End 

或者如果你有多個條件,那麼

select * from <tableName> where 1=1 AND (@para1=1 || ----) 
AND (@para1=2 || ----) 
0

嗨,你可以用參數測試,然後像這樣的和運營商開始。

@para1 as 
Select a,b,c 
from z 
where (@para1 = 0) or (@para1 = 1 and a >= 1 and a <= 10) or (@para1 = 2 and a >= 11 and a <= 20); 

注意到a = a將始終返回true,除非將a設置爲null。

祝你好運。