2013-04-01 2 views
1

У меня есть SQL-запрос, который выглядеть примерно так:Вычитая из COALESCE

SELECT 
COALESCE(field1, 0) AS field1, 
COALESCE(field2, 0) AS field2, 
COALESCE(field3 - field1 - field2, 0) AS field 
FROM ... 

However the problem with it is that given say: 

field1 = 1 
field2 = 0 
field3 = 2 

При отображении на выходе, field3 показывает 0, несмотря на 2 - используется 0 = 1.

COALESCE - 1 так как я оставил внешнее соединение нескольких таблиц, что может привести к значениям Null.

И в случае, если поле3 равно null, возникли бы проблемы?

Спасибо

+0

попробуйте ifnull функция .. – Dhinakar

ответ

5

Проделайте COALESCE самостоятельно:

SELECT COALESCE(field1, 0) AS field1, COALESCE(field2, 0) AS field2, 
     COALESCE(field3, 0) - coalesce(field1, 0) - coalesce(field2, 0) AS field 
FROM ... 

Что касается вашего примера, я подозреваю, что field2 на самом деле NULL, а не 0.

1

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

SELECT field1, field2, 
     field3 - (field1 + field2) 
FROM 
     (
      SELECT COALESCE(field1, 0) AS field1, 
        COALESCE(field2, 0) AS field2, 
        COALESCE(field3, 0) field3 
      FROM TableName 
     ) x 

Причина в том, что Орден SQL операции выглядит следующим образом:

  • ЕКОМА
  • ИНЕК
  • предложения GROUP BY
  • HAVING п
  • ЗЕЬЕСТ
  • ORDER BY п

ALIAS приведены на SELECT заявления и не доступны на уровне они были созданы.

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