ISNULL()返回NULL

时间:2015-01-07 06:46:16

标签: sql-server tsql sql-server-2012 isnull

为什么以下简单查询在没有匹配的行时返回null(任何行都不满足<Condition>)?

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

我也试过COALESCE(),结果相似。如果没有匹配的行,我怎么能返回零?

3 个答案:

答案 0 :(得分:1)

如果您希望condition将结果集减少到0或1行,这将有效:

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

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

答案 1 :(得分:0)

使用此:

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

如果缺少行,它将返回0

答案 2 :(得分:0)

您无法使用任何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>