SQL Server使用ISNULL并且没有返回任何结果

时间:2014-08-27 09:02:30

标签: sql sql-server

我已经尝试了这两个查询,我不明白为什么我的第一个查询返回'0'(当它应该)但我的第二个查询没有返回任何内容 - 它只是空白

我理解第一个查询返回货币代码为“USD”的产品的总和,如果未找到,则返回“0”,第二个查询应返回0,因为没有带有货币代码的产品USD”。

我的第二次查询有问题吗?

select ISNULL(SUM(Cost), 0) as Amount from products where Currencycode = 'USD'
select ISNULL(COST,0) as amount FROM PRODUCTS where currencycode= 'USD'

请记住我没有NULL字段,那么为什么第一个查询返回0而第二个查询不返回

4 个答案:

答案 0 :(得分:0)

您的第一个查询是使用SUM函数进行值聚合,如果没有行,则返回值为0。 您的第二个查询为每个与WHERE子句匹配的匹配项返回一个值,在您的情况下,如果表中没有行,则查询将不会返回任何内容。

答案 1 :(得分:0)

是的missl

因为

 select ISNULL(COST,0) as amount FROM PRODUCTS where currencycode= 'USD' 

查询没有选择行

但是当我们使用聚合函数时,它甚至在一行中返回null,因此第一个查询返回0

但在第二个查询中没有行返回,因此它会空白

答案 2 :(得分:0)

第一个查询返回标量值,因为SUM是一个聚合,您使用currencycode = USD计算所有成本的总和。

第二个查询不返回任何行,因为WHERE排除了所有行:

select ISNULL(COST,0) as amount FROM PRODUCTS where currencycode= 'USD' 

正如您所提到的那样,没有货币=美元的产品。

如果您想要在每一行中知道这应该有效的美元成本:

SELECT Usd_Cost = CASE WHEN  currencycode = 'USD' THEN Cost Else 0 END 
FROM PRODUCTS 

否则我不知道您希望第二个查询返回什么。

答案 3 :(得分:0)

第一次查询:

汇总所有成本值。因此,在整列为空之前,我们没有任何Null值

select ISNULL(SUM(Cost), 0) as Amount from products where Currencycode = 'USD'

第二次查询:

没有汇总。直接如果它是null,你将得到否则

select ISNULL(COST,0) as amount FROM PRODUCTS where currencycode= 'USD'
相关问题