【问题标题】:SQL - Using CASE and OR in SELECT WHENSQL - 在 SELECT WHEN 中使用 CASE 和 OR
【发布时间】:2017-10-31 15:09:33
【问题描述】:

我有这段代码:

SELECT 
    'Type1' AS TYPE
    ,1500 AS TotalBalance
    ,0 AS OverdueBal
INTO #temp1


SELECT

    CASE
        WHEN
            (TYPE = 'Type1' AND TotalBalance BETWEEN 1301 AND 5000) OR
            (TYPE = 'Type2' AND TotalBalance >= 1301) AND
            OverdueBal > 100 THEN 'Category1'
    END
   ,*
FROM
    #temp1

我不明白为什么这个CASE 语句的结果是TRUE?
该行满足大括号中的第一个条件,但不满足AND 条件。
如果我删除第二个大括号条件,那么它会正常工作,结果是 NULL
在我看来,它忽略了大括号。

【问题讨论】:

    标签: sql-server tsql conditional case


    【解决方案1】:

    你的括号不完整:

    SELECT (CASE WHEN ( (TYPE = 'Type1' AND TotalBalance BETWEEN 1301 AND 5000) OR
                        (TYPE = 'Type2' AND TotalBalance >= 1301)
                      ) AND
                      (OverdueBal > 100)
                 THEN 'Category1'
            END)
    

    你的版本被解析为:

    SELECT (CASE WHEN (TYPE = 'Type1' AND TotalBalance BETWEEN 1301 AND 5000) OR
                      ( (TYPE = 'Type2' AND TotalBalance >= 1301) AND
                        (OverdueBal > 100)
                      )
                 THEN 'Category1'
            END)
    

    这就是ANDOR 的解析方式。您应该使用括号来确保按照您想要的方式计算表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2014-01-29
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多