вычитание sql запроса - PullRequest
       1

вычитание sql запроса

1 голос
/ 08 декабря 2010

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

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

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

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

1000-null=1000

Ответы [ 2 ]

6 голосов
/ 08 декабря 2010

Правильным способом ANSI SQL будет (принимая во внимание, что totalsales и canceledsales могут быть равны нулю):

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

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

isnull(totalsales, 0) - isnull(canceledsales, 0)
0 голосов
/ 08 декабря 2010

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

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

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

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

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

totalsales - isnull(canceledsales, 0)

В книге SQL AntiPatterns есть целая глава, лучше объясняющая NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...