为什么下面的简单查询在没有匹配的行时返回null(<Condition>
没有被任何行满足)?ISNULL()返回NULL
SELECT ISNULL(MyField, 0) FROM [MyTable] WHERE <Condition>
我试过COALESCE()
以及类似的结果。如果没有匹配的行,我怎样才能返回零?
为什么下面的简单查询在没有匹配的行时返回null(<Condition>
没有被任何行满足)?ISNULL()返回NULL
SELECT ISNULL(MyField, 0) FROM [MyTable] WHERE <Condition>
我试过COALESCE()
以及类似的结果。如果没有匹配的行,我怎样才能返回零?
这将工作,只要你想到condition
减少的结果设置为0或1行:
SELECT ISNULL((SELECT MyField FROM [MyTable] WHERE <Condition>),0)
也就是说,创建一个没有FROM
子句的外部查询(因此它总是会产生只有一个行),然后使用子查询来获取0或1行的实际数据。
您不能转换0 rows
到1 row with a null value
与任何SQL内置机能的研究,因为这可能会导致数据
的错误解释,但你可以使用下面的逻辑定制你的结果(与您在.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>
如果''没有被满足,那么将不会有行。使用'count(*)'将返回匹配行的数量,如果没有行则显示'0'。 –
Bharadwaj
@Bharadwaj:我知道这就是为什么我发布这个问题。在这种情况下我怎样才能返回零呢? – dotNET
使用'IF @@ ROWCOUNT> 0 ...'请参阅http://msdn.microsoft.com/en-us/library/ms187316.aspx –