2016-12-28 5 views
2

私はパラメータでプロシージャを作成し、私は句の例がどこにあるかで異なるフィルタを配置する必要があり、パラメータに基づいていますどこにレコードをフェッチ:異なる場合によって句

@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

使用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

ようANDOR作品の組み合わせ以下は、この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 
を試すことができます

OR複数の条件を持っているならば、

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に設定されていない限り、a = aは常にtrueを返します。

幸運。

関連する問題