2010-12-08 4 views
1

У меня есть запрос, где он берет мои общие продажи и вычитает мои отмененные продажи, однако, если нет отмененных продаж, значение равно null. затем, когдаsql-запрос вычитания

так в основном, если мои canceledsales где NULL возвращает нулевое значение для столбца вычитания вместо из TotalSales

totalsales-canceledsales(null) = null 
1000-null=null 

я хочу, чтобы это было как этот

1000-null=1000 

ответ

6

Надлежащих ANSI SQL будет (с учетом totalsales и canceledsales оба могут быть равны нулю):

coalesce(totalsales, 0) - coalesce(canceledsales, 0) 

Вы также можете увидеть использование ISNULL на SQL Server:

isnull(totalsales, 0) - isnull(canceledsales, 0) 
+0

Так что мое фактическое выражение в построителе запросов - SUM (APRICE) - isnull (SUM (CancelRevenue), 0) – MyHeadHurts 2010-12-08 17:25:53

0

Вопрос заключается в том, что любая функция от NULL является NULL. В этом случае NULL означает «неизвестно».

Если вы вычитаете число из неизвестного числа, результат неизвестен.

Если вы вычитаете неизвестное число из известного числа, результат неизвестен.

Оба номера должны быть известны, чтобы вернуть известный ответ. В этом случае, если один из операндов NULL, NULL является правильным ответом.

Однако, если вы не хотите видеть, 0, чем NULL, то используйте ISNULL():

totalsales - isnull(canceledsales, 0) 

Книга SQL AntiPatterns имеет целую главу лучше объясняющую NULL.

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