Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

[править]

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

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

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

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

Ответ 2

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

Это должно сделать трюк.

Ответ 3

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

Ответ 4

Изменить: Похоже, все остальные избили меня до хаха

Нашел ответ.

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

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

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

Ответ 5

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

Если таблица имеет строки в ответе, она возвращает SUM (Цена). Если SUM равен NULL или нет строк, он вернет 0.

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

Ответ 6

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

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

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

Ответ 7

ORACLE/PLSQL:

ФУНКЦИЯ NVL

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

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

Ответ 8

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

то есть.

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

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