当我在TSQL中执行以下操作时,即使有值,我也会获得NULL
。
这是我的代码:
CASE
WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
THEN WEPHWORK.WEPHWORK + OCESAWD.OCESAWD + OCESAWE.OCESAWE
ELSE OCESAWD.OCESAWD + OCESAWE.OCESAWE
END as weighted
为什么会这样?
答案 0 :(得分:6)
你知道你的SQL真值表吗?
( NULL = ' ' ) --> UNKNOWN
( NULL > ' ' ) --> UNKNOWN
( ( NULL = ' ' ) OR ( NULL > ' ' ) ) ---> ( UNKNOWN OR UNKNOWN ) --> UNKNOWN
( ( 'x' = ' ' ) OR ( NULL > ' ' ) ) ---> ( FALSE OR UNKNOWN ) --> UNKNOWN
( ( ' ' = ' ' ) OR ( NULL > ' ' ) ) ---> ( TRUE OR UNKNOWN ) --> TRUE
最后一个案例经常可以让人们知道。
你也知道SQL填充规则吗?
答案 1 :(得分:4)
最有可能的原因是,至少有一个值为NULL
。
在T-SQL中,基本规则是:
NULL + anything = NULL
要检查它返回NULL
的原因,请尝试以下SQL。它会向您显示所有值,这样您就可以了解为什么要返回NULL
。
SELECT *
FROM (
SELECT WEPHWORK.WEPHWORK,
OCESAWD.OCESAWD,
OCESAWE.OCESAWE,
CASE
WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
1
ELSE 2
END as type
CASE
WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
THEN WEPHWORK.WEPHWORK + OCESAWD.OCESAWD + OCESAWE.OCESAWE
ELSE OCESAWD.OCESAWD + OCESAWE.OCESAWE
END as weighted
FROM your_tables.... ) x
WHERE x.weighted IS NULL