Sql server ISNULL()返回NULL
如果没有匹配的行(Sql server ISNULL()返回NULL,sql-server,tsql,sql-server-2012,isnull,Sql Server,Tsql,Sql Server 2012,Isnull,如果没有匹配的行(未被任何行满足),为什么下面的简单查询返回null 从[MyTable]中选择ISNULL(MyField,0),其中 我也尝试了COALESCE(),得到了类似的结果。没有匹配行时,如何返回零?使用以下方法: SELECT ISNULL(COUNT(MyField), 0) FROM [MyTable] WHERE <Condition> 从[MyTable]中选择ISNULL(计数(MyField),0),其中 如果缺少行,它将返回0。如果您希望条件将结果
未被任何行满足),为什么下面的简单查询返回null
从[MyTable]中选择ISNULL(MyField,0),其中
我也尝试了COALESCE()
,得到了类似的结果。没有匹配行时,如何返回零?使用以下方法:
SELECT ISNULL(COUNT(MyField), 0) FROM [MyTable] WHERE <Condition>
从[MyTable]中选择ISNULL(计数(MyField),0),其中
如果缺少行,它将返回
0
。如果您希望条件
将结果集减少到0或1行,这将起作用:
SELECT ISNULL((SELECT MyField FROM [MyTable] WHERE <Condition>),0)
SELECT ISNULL((从[MyTable]中选择MyField,其中),0)
也就是说,创建一个不带
FROM
子句的外部查询(因此总是只生成一行)然后使用子查询获取0行或1行实际数据。您不能使用任何sql内置函数将0行
转换为1行的空值
,因为这可能会导致数据的错误解释
但您可以使用以下逻辑自定义结果(与在.net中所做的相同)
If(从[MyTable]中选择计数(MyField)=0
选择0作为[MyField]
其他的
从[MyTable]中选择ISNULL(MyField,0)作为[MyField],其中
如果未满足
,则将没有行。使用count(*)
将返回匹配行数,如果没有行,则显示0
@Bharadwaj:我知道这一点,这就是我发布问题的原因。在这种情况下,如何返回零?使用如果@ROWCOUNT>0…
请参阅从[MyTable]中选择count(*),其中将给出0
如果没有行匹配,只需检查查询是否在程序逻辑中返回了行,但如果满足条件,它将返回count:)COUNT
总是给出一个数字,决不能为null
,afaik@Bharadwaj当前位置你没有领会要点。我是说当条件满足时,它不会返回MyField
。因此,这个解决方案并没有完全完成所讨论的查询需要做的事情。@DotNET我明白你的意思,我正在考虑这个问题。在我看来,您可能需要将Exist()
与if-else
blockBrilliant一起使用。这是一条直线,是一个简单问题的简单解决方案。然而,我确实想知道为什么应用于子查询时与应用于字段时,即使返回的行数在两种情况下都为零,ISNULL
的行为也会有所不同。@dotNET-正如我所说,我的外部查询只有一行,而不是零行。SELECT
子句描述了对其结果集中的每一行执行的操作。如果它要处理的行数为零,它将执行其工作零次。我现在明白了。非常感谢。
SELECT ISNULL((SELECT MyField FROM [MyTable] WHERE <Condition>),0)
If (select COUNT(MyField) FROM [MyTable] WHERE <Condition>)=0
select 0 as [MyField]
else
SELECT ISNULL(MyField, 0) as [MyField] FROM [MyTable] WHERE <Condition>