我有一个统计两个日期之间的所有项目的价格的查询。 下面是select语句:
SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
你可以假设所有的表都被正确设置。
如果我做两个日期之间的选择,并有该日期范围内没有任何项目,该函数返回NULL作为TotalPrice,而不是0。
我怎样才能确保如果不找到任何记录,0被退回,而不是空?
我有一个统计两个日期之间的所有项目的价格的查询。 下面是select语句:
SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
你可以假设所有的表都被正确设置。
如果我做两个日期之间的选择,并有该日期范围内没有任何项目,该函数返回NULL作为TotalPrice,而不是0。
我怎样才能确保如果不找到任何记录,0被退回,而不是空?
大多数数据库服务器有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排除所有的行,但“和”运营商仍然导致单行正在返回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(价格)。 如果SUM是NULL或没有行,则返回0。
把COALESCE(SUM(价格),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(Price)
值。
要做到这一点最简单的方法就是零添加到您的结果。
即
$A=($row['SUM'Price']+0);
echo $A;
希望这可以帮助!!