Как я могу изменить значение NULL на 0 при получении одного значения из функции SQL?
Вопрос
У меня есть запрос, который подсчитывает цену всех товаров между двумя датами.Вот инструкция 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;
надеюсь, это поможет!!