我已经尝试了这两个查询,我不明白为什么我的第一个查询返回'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而第二个查询不返回
答案 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'