簡體   English   中英

CASE SQL返回Null

[英]CASE SQL returning Null

當我在TSQL中執行以下操作時,即使有值,我也會得到NULL

這是我的代碼:

CASE
    WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
        THEN WEPHWORK.WEPHWORK + OCESAWD.OCESAWD + OCESAWE.OCESAWE 
    ELSE OCESAWD.OCESAWD + OCESAWE.OCESAWE
END as weighted

為什么會這樣?

你知道你的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填充規則......?

最有可能的原因是,至少有一個值為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM