Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL-在选择时使用大小写和或_Sql Server_Tsql_Conditional_Case - Fatal编程技术网

Sql server SQL-在选择时使用大小写和或

Sql server SQL-在选择时使用大小写和或,sql-server,tsql,conditional,case,Sql Server,Tsql,Conditional,Case,我有一段代码: 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 >= 1

我有一段代码:

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
我不明白的是为什么这个案例陈述结果是真的? 行确实满足大括号中的第一个条件,但不满足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)

这就是AND和OR的解析方式。您应该使用括号来确保表达式的计算方式符合您的要求。

括号不完整:

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