Сумма NULL проблема с результатом, если стоимость информации недействительная

Я нуждаюсь в том, чтобы принести сумму 2 данных:

dato1 = 1
dato2 = 2
totalsuma = 3

В настоящее время я делаю это таким:

 SET  totalsuma = (SELECT SUM(dato1+dato2) from tabla WHERE  CODIGO  = codigo_new);

до там все добро переменная totalsuma берет мне стоимость 3, проблема это у меня есть, когда одни из данных у него есть недействительная стоимость, ej:

dato1 = 1
dato2 = null
totalsuma = null

Когда я имею одни из данных в null, просто не осуществляется ожидаемое задание.

Кто-то сможет помогать мне в моей процедуре хранению, большое спасибо.

0
задан 26.06.2018, 15:47
3 ответа

Попробуй использовать ее funciГіn ifnull

SET totalsuma = (SELECT SUM(ifnull( dato1, 0 ) + ifnull(dato2,0)) 
                from tabla 
                WHERE CODIGO = codigo_new);
1
ответ дан 20.11.2019, 07:42
  • 1
    я это тестирую сейчас и комментирую тебе! – Francisco Acevedo 27.06.2018, 06:33
  • 2
    Большое спасибо, это funció n, что нуждался ;) – Francisco Acevedo 27.06.2018, 06:49

Возможные решения:

MySQL

Функция MySQL IFNULL () возвращает стоимость в случае, если выражение будет недействительным: IFNULL(dato,0)

SQL Server

funciГіn SQL SERVER ISNULL () tambiГ©n тебе позволяет возвращать альтернативная стоимость в случае, если переменная будет недействительной:
ISNULL(dato,0)

Oracle

La funciГіn ORACLE NVL () он дает нам тот же результат, что и предыдущие:
NVL(dato, 0)

В твоем специфическом случае necesitarГ-эксперт делать что-то как это:

SET  totalsuma = (SELECT SUM(ISNULL(dato1,0)+ISNULL(dato2,0)) 
from tabla WHERE  CODIGO  = codigo_new);
1
ответ дан 20.11.2019, 07:42
  • 1
    Этот сайт - в кастильце, не sé из-за qué ответ está в inglé в. Ademá s для неких драйверов Базы данных он не применяет применять funció n, что ademá s смоги быть очень дорогой, как это случай ISNULL. Перед тем, как отвечать лучше, чтобы OP показал qué драйвер BD está используя, чтобы давать ответ, основанный на этом драйвере. – A. Cedano 26.06.2018, 15:53
  • 2
    Извинение pensé что был в сайте на Английском языке, ты прав, но только в неких случаях функция ISNULL дорогая использования как случай писания ее в WHERE. Лучшее serí в который он определит нас, что драйвер BD использует. Я оставляю тебе ссылку Using is null in where clause is expensive – Ivan-San 26.06.2018, 15:59
  • 3
    Факт состоит в том, чтобы например дали SQL Server, использование SUM на наборе стоимости, где один из них их было NULL, результат не оказывается поврежденным. Следовательно, использование ISNULL в этом случае ненужное, он ни для чего не служит má s, что, чтобы перегружать có я говорю. И это результата смоги быть очень дорогим, если справляются много данных (консультация podrí когда миллионы линий группируют тысячи...). – A. Cedano 26.06.2018, 16:08
  • 4
    Оцененные, в настоящее время я использую MySql, я попытаюсь сейчас и я комментирую. – Francisco Acevedo 27.06.2018, 06:32
  • 5
    спасибо за определение funció n для различных механизмов, окончательно та MySql - та, которая нуждалась. – Francisco Acevedo 27.06.2018, 06:50

Чтобы дополнять, tambiГ©n podrГ, - чтобы делать с COALESCE, как он делается IFNULL.

COALESCE составляет часть стандарта TSQL.

SET totalsuma = (SELECT SUM(COALESCE(dato1, 0) + COALESCE(dato2,0)) 
                from tabla 
                WHERE CODIGO = codigo_new);
1
ответ дан 20.11.2019, 07:42