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