简体   繁体   English

CASE SQL返回Null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM