如何在where子句中编写多级条件

时间:2013-08-14 07:34:54

标签: sql-server

让我们假设,我有一列'Rate',并且必须根据以下标准获取行。 CHARS下面只是列。

  1. 如果X> Y,则获取率
  2. 如果A> B则
    • 如果C> D则获取率
    • 如果E> F则
      • 如果G> H则获取率
      • 如果我> J然后获取费率
      • 如果K> L则
        • 如果M> N则获取率
  3. 我陷入困境,如何在WHERE子句中编写多级条件。

2 个答案:

答案 0 :(得分:4)

我完全不确定我是否已经得到了正确的结果,但听起来你只想在WHERE子句中结合多个条件:

WHERE
    X>Y OR
    (
       A>B AND
       (
          C>D OR
          (
              E>F AND
              (
                 G>H OR
                 I>J OR
                 (K>L AND M>N)
              )
          )
       )
    )

并非所有括号都是严格必要的,但我通常更喜欢使用它们而不是记住ANDOR是否具有更高的优先级。

答案 1 :(得分:3)

要将条件解析为SQL,可以使用一组简单的两个规则:

  1. 将“然后获取率”更改为“OR(...)”
  2. 将“然后”更改为“AND(...)”
  3. 所以生成的SQL就是这样的:

    select Rate
      from ...
     where (X > Y) OR
              (A > B) AND 
                ((C > D) OR 
                 (E > F) AND 
                   ((G > H) OR 
                    (I > J) OR 
                    (K > L) AND 
                       (M > N)))