2017-05-02 39 views
1

以下查詢正確顯示了所有當前/潛在客戶的記錄,無論他/她是否下單。但是,以下SELECT聲明的別名始終返回1,即使在某些情況下o.OrderID爲空(即透視客戶尚未下訂單時)也是如此。爲什麼?我認爲下面的CASE聲明是正確的(如this響應所示)。我正在使用SQL Server 2012注意:請記住,雖然OrderID是一個PK,但如果未滿足連接條件,它將始終爲null,並且與OUTER JOIN中的所有其他訂單表列無關。T-SQL CASE子句:指定WHEN NULL與外部JOIN的問題

SELECT c.customerID, o.OrderID, CASE When o.OrderID is NULL Then 0 Else 1 End as YesNO 
FROM Customers c 
LEFT JOIN Orders o 
ON c.customerID = o.customerID 
+1

你確定有'o.OrderId'爲空的情況嗎?還是應該是'c.OrderId'? – DigiFriend

+0

@DigiFriend是的。這就是爲什麼我在'SELECT'中包含'o.OrderID',所以我可以驗證。 – nam

+0

是你在northwind數據庫下執行它嗎?您的查詢是正確的。如果是,那麼它顯示0正確 – Fahmina

回答

0

嘗試使用ISNULL

我敢肯定的原因是因爲當你比較IS NULL爲NULL,則結果爲NULL,因此假,因此爲什麼它是評估你的ELSE 1

SELECT c.customerID, o.OrderID, CASE When ISNULL(o.OrderID, 0) = 0 Then 0 Else 
1 End as YesNO 
FROM Customers c 
LEFT JOIN Orders o 
ON c.customerID = o.customerID 
+0

感謝您解釋問題的可能原因。 – nam

+0

當你檢查一個值是否爲null時,它返回true或false,而不是null。當你嘗試使用'= null' *來檢查一個值是否爲null時,那麼你會得到'null'。另外,'null'並不意味着錯誤,但它也不意味着是真的,因爲它不是'真',那麼它就不會在'when ...'時返回'0'。 – SqlZim