-1

私がやろうとしているのは、ブール値に基づいて、2 つの条件または 2 つのうちの少なくとも 1 つを満たす行を選択するクエリを作成することです。

以下は、ジョブを実行する単純化されたクエリです。つまり、私のクエリの where 句ははるかに複雑なので、より読みやすい方法で書き直す方法を探しています。

これは可能ですか?

declare @AndParam bit
set @AndParam = 1

SELECT * FROM Table

  Where 
  (@AndParam = 1
  AND
  (Table.CategoryID = 3 
  AND
  Table.Age < 30))

  OR

  (@AndParam = 0
  AND
  (Table.CategoryID = 3 
  OR
  Table.Age < 30))

編集:
この質問は、読みやすさと美学に関するものです。
代わりに、Table.Age < 30サブクエリを含む 5 つの追加チェックがあります。実際には、これはコードの大部分が複製されていることを意味し、違いは 1 つだけです。And / Or
SQL を読むのがいかに難しいかを見て、私はそれを修正しようとしています。

4

1 に答える 1

0

多分このようなもの:

Where
   CASE WHEN Table.CategoryID = 3 THEN 1 ELSE 0 END +
   CASE WHEN Table.Age < 30 THEN 1 ELSE 0 END -- + more CASEs for each condition
   >=
      CASE WHEN @AndParam = 1 THEN 2 ELSE 1 END
      --For more conditions, change 2 above to however many conditions there are

基本的に、各条件が 1 または 0 になるようにし、それらをすべて足し合わせてから@AndParam、条件の総数に達したか、少なくとも 1 つに達したかによって、最終チェックを行います。

于 2013-06-27T12:14:21.777 に答える