在查询中动态设置 Where 条件

Dynamically setting Where condition in query

我正在寻找一种方法,我需要根据数据动态更改 WHERE 子句的条件。

请找到我的场景的模拟数据。

 -----------------------------------
  ConditionID        ConditionName
 -----------------------------------
  1                  N/A
  2                  Over
  3                  Under

  --------------------------------------------------------------
   ID        Amount        ThresholdAmount        ConditionID
  --------------------------------------------------------------
   1         90            100                    3
   2         190           100                    2
   3         90            100                    2
   4         190           100                    3
   5         90            100                    1

我需要根据 [ConditionID] 将 [Amount] 与 [ThresholdAmount] 进行比较。例如,如果条件是 'Over' 那么 [Amount] 应该超过 [ThresholdAmount],如果不满足则应该过滤掉记录。

注意:我只是在寻找是否有比我更好的方法。

我的方法:

WHERE
    1 =   CASE 
            WHEN ConditionName = 'OVER' THEN
                CASE WHEN ([Amount] >= [ThresholdAmount]) THEN 1 ELSE 0 END
            WHEN ConditionName = 'UNDER' THEN 
                CASE WHEN ([Amount] <= [ThresholdAmount]) THEN 1 ELSE 0 END
            WHEN ConditionName =  'N/A' THEN
                1
          END

谢谢, 普拉卡兹

我认为您在这里使用 "Dynamically" 这个词是错误的,您的意思不是真正的动态。搜索 dynamic sql 以感受差异。

通常最好避免在 where 子句中使用 case 表达式。您的 where 子句可以重写为:

WHERE       (ConditionName = 'OVER' AND [Amount] >= [ThresholdAmount])
        OR  (ConditionName = 'UNDER' AND [Amount] <= [ThresholdAmount])
        OR  ConditionName =  'N/A'

顺便说一下,你提到了 "if the condition is 'Over' then the [Amount] should be over the [ThresholdAmount]",但在你的代码中你检查 Amount 是否是 'over' 或等于 ThresholdAmount。我按照你的代码做了什么。

我还扩展了您对数据库不区分大小写的假设。