SQL查询清理-和/或基于条件

SQL查询清理-和/或基于条件,sql,where,code-cleanup,Sql,Where,Code Cleanup,我要做的是编写一个查询,它基于布尔值选择满足两个条件或至少满足其中一个条件的行 下面是一个简化的查询,用于完成任务。问题是,我的查询中的where子句要复杂得多,所以我正在寻找一种以更可读的方式重写它的方法 这可能吗 declare @AndParam bit set @AndParam = 1 SELECT * FROM Table Where (@AndParam = 1 AND (Table.CategoryID = 3 AND Table.Age <

我要做的是编写一个查询,它基于布尔值选择满足两个条件或至少满足其中一个条件的行

下面是一个简化的查询,用于完成任务。问题是,我的查询中的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很难阅读,我正在寻找解决办法。

可能是这样的:

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进行最后检查。

在我看来,这是最小的子句集,不能再减少了。如果@AndParam是布尔值,则可以编写@AndParam而不是@AndParam。但那只是句法上的糖分。