Как я могу изменить NULL на 0 при получении одного значения из функции SQL? - PullRequest
54 голосов
/ 17 июня 2009

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

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

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

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

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

Ответы [ 8 ]

95 голосов
/ 17 июня 2009

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

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.

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

13 голосов
/ 17 июня 2009
SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

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

11 голосов
/ 17 июня 2009
SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
6 голосов
/ 22 декабря 2011
SELECT COALESCE(
    (SELECT SUM(Price) AS TotalPrice 
    FROM Inventory
    WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
    , 0)

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

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

6 голосов
/ 17 июня 2009

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

Нашел ответ.

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

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

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded 
BETWEEN @StartDate AND @EndDate)
4 голосов
/ 17 июня 2009

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

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

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

1 голос
/ 25 апреля 2014

ORACLE / PLSQL:

ФУНКЦИЯ NVL

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

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

0 голосов
/ 23 января 2015

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

т.е.

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

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

...