为什么以下简单查询在没有匹配的行时返回null(任何行都不满足<Condition>
)?
SELECT ISNULL(MyField, 0) FROM [MyTable] WHERE <Condition>
我也试过COALESCE()
,结果相似。如果没有匹配的行,我怎么能返回零?
答案 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>