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

Sql server 如何在where子句中编写多级条件,sql-server,Sql Server,让我们假设,我有一列“Rate”,并且必须根据以下标准获取行。 下面的字符只是列 如果X>Y,则取数率 如果A>B,那么 如果C>D,则取数率 如果E>F,那么 如果G>H,则取数率 如果I>J,则获取速率 如果K>L,那么 如果M>N,则取数率 如何在WHERE子句中编写多级条件,这一点我完全不确定我是否掌握了正确的方法,但听起来您只是想在WHERE子句中组合多个条件: WHERE X>Y OR ( A>B AND (

让我们假设,我有一列“Rate”,并且必须根据以下标准获取行。 下面的字符只是列

  • 如果X>Y,则取数率
  • 如果A>B,那么
    • 如果C>D,则取数率
    • 如果E>F,那么
      • 如果G>H,则取数率
      • 如果I>J,则获取速率
      • 如果K>L,那么
        • 如果M>N,则取数率

  • 如何在WHERE子句中编写多级条件,这一点我完全不确定我是否掌握了正确的方法,但听起来您只是想在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)
                  )
              )
           )
        )
    

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

    我一点也不确定我是否得到了正确的结果,但听起来你只是想在
    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)
                  )
              )
           )
        )
    

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

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

  • 将“然后获取速率”更改为“或(…)”
  • 将“then”改为“AND(…)”
  • 因此,生成的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)))
    

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

  • 将“然后获取速率”更改为“或(…)”
  • 将“then”改为“AND(…)”
  • 因此,生成的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)))
    

    我正在尝试将其转换为SQL。。谢谢回复。我正在尝试将其转换为SQL。。谢谢你的回复。