[英]CASE SQL returning Null
When I execute the below in TSQL I get NULL
even though there is a value. 当我在TSQL中执行以下操作时,即使有值,我也会得到
NULL
。
Here's my code: 这是我的代码:
CASE
WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
THEN WEPHWORK.WEPHWORK + OCESAWD.OCESAWD + OCESAWE.OCESAWE
ELSE OCESAWD.OCESAWD + OCESAWE.OCESAWE
END as weighted
Why is this happening? 为什么会这样?
Do you know your SQL truth tables? 你知道你的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
The last case can often catch people out. 最后一个案例经常可以让人们抓狂。
Also do you know you SQL padding rules...? 你也知道你的SQL填充规则......?
Most likely, it is because at least one of your values is NULL
. 最有可能的原因是,至少有一个值为
NULL
。
In T-SQL, the basic rule is: 在T-SQL中,基本规则是:
NULL + anything = NULL
To check why it is returning NULL
, try the following piece of SQL. 要检查它返回
NULL
,请尝试以下SQL。 It will show you all your values laid out together so you can see why the NULL
is being returned. 它将显示您一起布置的所有值,以便您可以看到为什么返回
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.