2012-03-27 3 views
7

Учитывая таблицу:SQL-запрос для добавления значений двух столбцов, содержащих нулевые значения?

 
    ID ONE TWO 
    X1 15 15 
    X2 10 - 
    X3 -  20 

Этот запрос:

SELECT (ONE + TWO) FROM (TABLE) 

Просто возвращает сумму значений X1 «s, но не других, так как, по крайней мере один столбец имеет нулевое значение. Как я могу добавить их, даже если есть нуль? т. е. считать нуль как 0?

ответ

10
SELECT (COALESCE(ONE, 0) + COALESCE(TWO, 0)) FROM (TABLE) 

COALESCE возвратит первое ненулевое значение, найденное в параметрах слева направо. Таким образом, когда первое поле равно нулю, она примет 0.

Таким образом, X2 приведет к 10 + 0 = 10

1

уже есть хороший ответ, но я думаю, что стоит упомянуть в antonpug (в случай, который он не знает), что причина, по которой это происходит, заключается в том, что NULL не является значением, которое можно сравнить или суммировать.

NULL не 0 или '' (пустая строка), так что каждая операция с NULL приведет к NULL (10 + NULL = NULL), даже (NULL = NULL) будет вычисляться FALSE

+1

Я знаю. Благодаря! – antonpug

+1

В Oracle пустая строка NULL. Это отличается от стандартного и других RDBM. В Oracle 'select 'true' from dual, где '' null, возвращает true и' select 'true' from dual, где '' = '' 'не возвращает строку. Из-за этого оператор конкатенации '||' будет возвращать только null, если обе стороны равны нулю. 'select null || 'Hello World!' from dual' дает строку «Hello World!». –

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