2016-12-16 93 views
0

我有一個臨時表(見圖)和事故列數和可預防事故的數量應該顯示數據,但他們都是空的。我如何解決它?謝謝警告:空值被消除

enter image description here

+0

你確定這就是它拋出的警告?你是否已將這部分代碼分離到另一個SSMS窗口中?無論你想擺脫這個警告,你都可以'SET ANSI_WARNINGS OFF GO'但我很確定這不是你的警告來自哪裏。 – scsimon

+1

您的LEFT JOIN實際上是INNER,因爲WHERE謂詞要求左連接的表列不爲NULL。可能是這個問題。警告是OK請參閱http://stackoverflow.com/questions/18719436/getting-warning-null-value-is-eliminated-by-an-aggregate-or-other-set-operation – Serg

+0

什麼是下一段代碼爲最終選擇? – SQLChao

回答

0

原因是因爲使用的是空值

做聚合

讓我用下面的例子來說明:

create TABLE #test (ID INT, Qty INT, Price MONEY) 
INSERT INTO #test (ID, Qty, Price) SELECT 1, 25, 100 
INSERT INTO #test (ID, Qty, Price) SELECT 2, NULL, 200 
INSERT INTO #test (ID, Qty, Price) SELECT 3, 5, NULL 

SELECT SUM(Qty) FROM #test WHERE ID IN (1,3) 
-- no warning 
--Because qty in id 1,3 is not null 

SELECT SUM(Price) FROM #test WHERE ID IN (1,3) 
-- Warning: Null value is eliminated by an aggregate or other SET operation. 
-- Because price 100 is added with NULL 

SELECT AVG(Qty) FROM #test WHERE ID IN (1,2) 
-- Warning: Null value is eliminated by an aggregate or other SET operation. 
-- Because qty is null + 25 to get average 
+1

但是OP在所有聚合上都使用了ISNULL ....因此問題不應該顯示在代碼片段中。 – scsimon