Mat*_*att 56 sql t-sql null sum
我有一个查询计算两个日期之间所有项目的价格.这是select语句:
SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Run Code Online (Sandbox Code Playgroud)
您可以假设所有表都已正确设置.
如果我在两个日期之间进行选择并且该日期范围内没有项目,则该函数将返回NULL作为TotalPrice而不是0.
我怎样才能确保如果没有找到记录,则返回0而不是NULL?
Jon*_*upp 98
大多数数据库服务器都有一个COALESCE函数,该函数将返回非空的第一个参数,因此以下内容应该执行您想要的操作:
SELECT COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Run Code Online (Sandbox Code Playgroud)
[编辑]
只是为了澄清事情,因为似乎有很多关于"COALESCE/ISNULL如果没有行匹配仍会返回NULL"的讨论,试试这个查询你可以直接复制并粘贴到SQL Server中:
SELECT coalesce(SUM(column_id),0) AS TotalPrice
FROM sys.columns
WHERE (object_id BETWEEN -1 AND -2)
Run Code Online (Sandbox Code Playgroud)
请注意,where子句排除了来自sys.columns的所有行,但是'sum'运算符仍然会返回一行为null的行,它将修复合并为一行为0.
我希望这有助于解释它.
Jos*_*eph 14
SELECT ISNULL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Run Code Online (Sandbox Code Playgroud)
这应该够了吧.
Bla*_*erX 11
SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Run Code Online (Sandbox Code Playgroud)
编辑:看起来其他人都打败了我哈哈
找到了答案.
ISNULL() 确定具有空值时要执行的操作.
在这种情况下,我的函数返回一个空值,所以我需要指定一个0来代替.
SELECT ISNULL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded
BETWEEN @StartDate AND @EndDate)
Run Code Online (Sandbox Code Playgroud)
小智 6
SELECT COALESCE(
(SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
, 0)
Run Code Online (Sandbox Code Playgroud)
如果表在响应中有行,则返回SUM(Price).如果SUM为NULL或没有行,则返回0.
如果没有找到行,则放置COALESCE(SUM(Price),0)在MSSQL中不起作用.
你可以用
SELECT ISNULL(SUM(ISNULL(Price, 0)), 0).
我 99% 肯定这会奏效。