2

だから私は次のクエリを持っています

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] is 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

通常、!= null ではなく is not null を使用する必要があります。何が起きてる?

4

3 に答える 3

3

条件ANDではなく、を使用する必要があります。OR

[Business] != '' and [Business] is not null

ネガを使っているのでややこしいです。条件全体を反転して、ポジティブを使用するだけです (この場合は を使用しますOR)。

(Case When ([Business] == '' or [Business] is null) 
    Then 'No Phone Number' Else [Business] END)
于 2012-10-18T22:49:41.307 に答える
2

あなたの論理は間違っています。2 つの否定をチェックするときは、 ANDを使用する必要があります。

Case When ([Business] != '' AND [Business] is not null
于 2012-10-18T22:50:50.360 に答える
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 演算子を使用して null 値をチェックし、null の等値比較は常に失敗します (select 'hi' where (null = null)およびを使用した実験select 'hi' where (null != null))。ORステートメントと短絡の使用は、次のことを意味しました。

  1. 電話番号がそこにある場合、最初の条件[Business] != ''は true です。したがって、OR ステートメントは真であり、電話番号が使用されます
  2. 最初の条件が失敗すると、2 番目の条件[Business] != nullも false になります。したがって、OR ステートメントは false であり、「電話番号なし」が表示されます
于 2012-10-18T22:58:10.490 に答える