所以我有以下查询
Select id, [First], [Last] , [Business] as contactbusiness, (Case When ([Business] != '' or [Business] is not null)
Then [Business] Else 'No Phone Number' END) from contacts
结果看起来像
id First Last contactbusiness (No column name)
2 John Smith
3 Sarah Jane 0411 111 222 0411 111 222
6 John Smith 0411 111 111 0411 111 111
8 NULL No Phone Number
11 Ryan B 08 9999 9999 08 9999 9999
14 David F NULL No Phone Number
我希望记录2也显示无电话号码
如果我将“[Business] not null”更改为[Business]!= null,那么我会得到正确的结果
id First Last contactbusiness (No column name)
2 John Smith No Phone Number
3 Sarah Jane 0411 111 222 0411 111 222
6 John Smith 0411 111 111 0411 111 111
8 NULL No Phone Number
11 Ryan B 08 9999 9999 08 9999 9999
14 David F NULL No Phone Number
通常你需要使用is not null而不是!= null。什么事发生在这里?
答案 0 :(得分:3)
您需要在条件中使用AND
,而不是OR
:
[Business] != '' and [Business] is not null
令人困惑,因为你使用底片。我只是翻转整个条件并使用正数(在这种情况下你会使用OR
):
(Case When ([Business] == '' or [Business] is null)
Then 'No Phone Number' Else [Business] END)
答案 1 :(得分:2)
你的逻辑错了。检查两个底片时,您需要使用 AND :
Case When ([Business] != '' AND [Business] is not null
答案 2 :(得分:2)
如上所述,你的逻辑是关闭的。你可以用
SELECT id, [First], [Last] , [Business] AS contactbusiness,
COALESCE(NULLIF([Business], ''), 'No Phone Number')
FROM contacts
,SQL
更加浓缩
If i change the "[Business] is not null" to [Business] != null then i get the correct results
的工作原因是[Business] != null
始终为假。
正如您所提到的,SQL使用is运算符检查空值,并且空值的相等比较总是失败(试验select 'hi' where (null = null)
和select 'hi' where (null != null)
)。使用OR语句和短路意味着:
[Business] != ''
为真。因此,OR状态为真,并且使用了电话号码[Business] != null
也为假。因此,OR语句为false,并显示“No Phone Number”