Как я могу изменить значение NULL на 0 при получении одного значения из функции SQL?

StackOverflow https://stackoverflow.com/questions/1005036

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть запрос, который подсчитывает цену всех товаров между двумя датами.Вот инструкция select:

SELECT SUM(Price) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Вы можете предположить, что все таблицы были настроены правильно.

Если я делаю выбор между двумя датами и в пределах этого диапазона дат нет элементов, функция возвращает NULL как итоговую цену, а не 0.

Как я могу убедиться, что если записи не найдены, возвращается 0, а не NULL?

Это было полезно?

Решение

Большинство серверов баз данных имеют СЛИВАТЬСЯ функция, которая вернет первый аргумент, отличный от null, поэтому следующее должно делать то, что вы хотите:

SELECT COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

[править]

Просто чтобы прояснить ситуацию, поскольку, похоже, ведется много дискуссий о том, что "COALESCE / ISNULL все равно вернет NULL, если ни одна строка не совпадает", попробуйте этот запрос, который вы можете скопировать и вставить в SQL Server напрямую как есть:

SELECT coalesce(SUM(column_id),0) AS TotalPrice 
FROM sys.columns
WHERE (object_id BETWEEN -1 AND -2)

Обратите внимание, что предложение where исключает из рассмотрения все строки из sys.columns, но оператор 'sum' по-прежнему приводит к возвращению одной строки, имеющей значение null, которое объединяет исправления в одну строку с 0.

Я надеюсь, что это поможет объяснить это.

Другие советы

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Это должно сработать.

SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
SELECT COALESCE(
    (SELECT SUM(Price) AS TotalPrice 
    FROM Inventory
    WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
    , 0)

Если таблица содержит строки в ответе, она возвращает SUM (цена). Если сумма равна нулю или строк нет, возвращается 0.

Установка COALESCE (SUM (Price), 0) НЕ работает в MSSQL, если строки не найдены.

Редактировать . Похоже, все остальные избили меня, ха-ха

Нашел ответ.

ISNULL () определяет, что делать, если у вас есть нулевое значение.

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

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded 
BETWEEN @StartDate AND @EndDate)

Вы можете использовать

SELECT ISNULL (SUM (ISNULL (Price, 0)), 0) .

Я на 99% уверен, что это сработает.

ORACLE / PLSQL:

NVL ФУНКЦИЯ

SELECT NVL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Этот оператор SQL вернет 0 , если SUM (Price) вернул нулевое значение. В противном случае он вернет значение SUM (Цена) .

Самый простой способ сделать это - просто добавить ноль к вашему результату.

т. е.

$A=($row['SUM'Price']+0);
echo $A;

надеюсь, это поможет!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top