![](/img/trans.png)
[英]SQL CASE expression returning sets based on multiple modes for null and not 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.