2016-12-16 6 views
0

У меня есть таблица темпа (см. Изображение) и столбцы Количество аварий и число предупреждаемых аварий должно отображать данные, однако они появляются как все NULL. Как это исправить? СпасибоПредупреждение: исключается нулевое значение

enter image description here

+0

Вы уверены, что это, где он бросает предупреждение? Вы отделили эту часть кода от другого окна SSMS? Независимо от того, хотите ли вы избавиться от предупреждения, вы можете «УСТАНОВИТЬ ANSI_WARNINGS OFF GO». Но я уверен, что это не то место, откуда приходит ваше предупреждение. – scsimon

+1

Ваша LEFT JOIN эффективно INNER, потому что предикат WHERE требует, чтобы левый столбец таблицы не был NULL. Наверное, это проблема. Предупреждение в порядке см. 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

Смежные вопросы