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