我有一个查询计算两个日期之间所有项目的价格。这是select语句:

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

您可以假设所有表格都已正确设置。

如果我在两个日期之间进行选择并且该日期范围内没有任何项目,则该函数将返回NULL作为TotalPrice而不是0。

如何确保找不到记录,返回0而不是NULL?

有帮助吗?

解决方案

大多数数据库服务器都有 COALESCE 功能,该功能将返回第一个参数是非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。 / p>

我希望这有助于解释它。

其他提示

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(Price)。如果SUM为NULL或没有行,则返回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 FUNCTION

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

如果 SUM(Price)返回空值,则此SQL语句将返回 0 。否则,它将返回 SUM(Price)值。

最简单的方法是在结果中添加零。

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

希望这会有所帮助!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top