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>
当没有匹配的行(<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>