ISNULL() 返回 NULL

ISNULL() returning NULL

当没有匹配的行(<Condition> 不符合任何行)时,为什么以下简单查询 return 为空?

SELECT ISNULL(MyField, 0) FROM [MyTable] WHERE <Condition>

我也试过 COALESCE(),结果相似。当没有匹配的行时,我如何 return 归零?

使用这个:

SELECT ISNULL(COUNT(MyField), 0) FROM [MyTable] WHERE <Condition>

如果缺少行,它将 return 0

如果您希望 condition 将结果集减少到 0 或 1 行,这将起作用:

SELECT ISNULL((SELECT MyField FROM [MyTable] WHERE <Condition>),0)

也就是说,创建一个没有 FROM 子句的外部查询(因此总是只生成一行),然后使用子查询来获取您的 0 或 1 行实际数据。

您不能使用任何 sql 内置函数将 0 rows 转换为 1 row with a null value,因为这可能会导致数据的错误解释

但是您可以使用以下逻辑自定义结果(与在 .net 中所做的相同)。

If (select COUNT(MyField) FROM [MyTable] WHERE <Condition>)=0
select 0 as [MyField]
else
SELECT ISNULL(MyField, 0) as [MyField] FROM [MyTable] WHERE <Condition>