SQL - 在 SELECT WHEN 中使用 CASE 和 OR

SQL - Using CASE and OR in SELECT WHEN

我有这段代码:

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
在我看来,它忽略了大括号。

你的括号不完整:

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 的解析方式。您应该使用括号来确保表达式的计算方式符合您的预期。