select *
from mytable
where (if @key=0
pkey>=0
else
pkey = @key)
@key
はストアドプロシージャに渡される値でpkey
あり、はの列ですmytable
。
select *
from mytable
where (if @key=0
pkey>=0
else
pkey = @key)
@key
はストアドプロシージャに渡される値でpkey
あり、はの列ですmytable
。
これはどう:
select *
from mytable
where ((@key=0 AND pkey>=0) OR (@key<>0 AND pkey = @key))
CASE
以下のように(あなたが試している方法と少し似ていますif
)を使用します。(デモ)
select *
from mytable
where pkey = case when @key <> 0 then @key
else Abs(pkey) end
これはあなたのために働くでしょう。caseステートメントを使用すると、動的フィルターを適用できます。
select *
from mytable
where 1 = case
when @key=0 then case when pkey>=0 then 1 else 0 end
else case when pkey = @key then 1 else 0 end
end