我有一个查询,计算两个日期之间所有商品的价格。这是选择语句:
SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
您可以假设所有表都已正确设置。
如果我在两个日期之间进行选择并且该日期范围内没有项目,则该函数将 NULL 作为 TotalPrice 而不是 0 返回。
如何确保如果没有找到记录,则返回 0 而不是 NULL?
大多数数据库服务器都有一个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”运算符仍会导致返回单行为空,这会将固定为带有 0 的单行。
您可以使用ISNULL()
.
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)
编辑:看起来其他人都打败了我哈哈
找到了答案。
ISNULL()
确定当你有一个空值时要做什么。
在这种情况下,我的函数返回一个空值,所以我需要指定一个 0 来代替返回。
SELECT ISNULL(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。
如果没有找到行,则在 MSSQL 中放置 COALESCE(SUM(Price), 0) 不起作用。
你可以使用
SELECT ISNULL(SUM(ISNULL(Price, 0)), 0)
.
我有 99% 的把握这会奏效。
甲骨文/PLSQL:
NVL 功能
SELECT NVL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
0
如果SUM(Price)
返回空值,则此 SQL 语句将返回。否则,它将返回该SUM(Price)
值。
最简单的方法就是在结果中添加零。
IE
$A=($row['SUM'Price']+0);
echo $A;
希望这可以帮助!!