マルチ条件に基づいてテンポラリ・テーブルをクエリーして異なる結果セットを得る方法

913 ワード

次のようなsql文を書くと,@cパラメータを入力したときに得たい結果セットが得られた.
select * from @tb t where t.id in (select id from tb where f = @c)
ただし、@a,@b,@cがあり、それぞれ@tbから異なる結果セットを得たい場合は、例えば
 
  
if @a is not null
begin
-- @a
end
if @b is not null
begin
-- @b
end
if @c is not null
begin
-- @c
end

このようにすれば問題ないようですが、@aと@bが一緒で、さらに@a,@b,@c,@d,@e,@fなどNの複数の条件の組み合わせでは困ります.@tbを先にbuildして、最後に一度にクエリーしなければなりません.
--構築@tb
select * from @tb
もし私が@a,@bによって@tb結果セットを得た場合、私が再び@cを使用して条件判断を行うと、さっきの結果が上書きされます.
「条件に合わないレコードを削除する」という方法で行うことができますが、@tbはすでに@a,@bが得たい結果を得ているので、@cに合わない結果を削除すればいいのです.終わります.
 
  
if @c is not null
begin
delete c from @tb c where c.id not in (select id from tb where f = @c)
end
select * from @tb