-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是五个额外的检查,包括子查询。实际上,这意味着我有一大段代码重复,只有一个区别;和/或
看到 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 回答