我有一个类似于这个的表格
+--+-----+----+
|ID|Entry|Exit|
+--+-----+----+
|18|32154|NULL|
+--+-----+----+
|19|NULL |NULL|
+--+-----+----+
当我选择AVG(Entry)时,它正确地显示32154;当我选择AVG(Exit)时,则会出现“操作数数据类型无效”的错误提示。
如何让只有NULL值的列显示NULL的平均值?
谢谢。
我有一个类似于这个的表格
+--+-----+----+
|ID|Entry|Exit|
+--+-----+----+
|18|32154|NULL|
+--+-----+----+
|19|NULL |NULL|
+--+-----+----+
尝试像这样使用CASE
SELECT CASE WHEN SUM(Exit) IS NULL THEN NULL ELSE AVG(Exit) END AS MyAverage
FROM MyTable
我认为问题出在列名上。只需将列名更改为ExitCol并检查即可。
在这种情况下,甚至 SELECT AVG(ExitCol) AS MyAverage FROM MyTable
也会起作用。
select sum(a) from (select convert(int, null) a union select null) a
Select avg(isnull(Exit,0)) from table
使用set xact_abort off
可以使其返回null
declare @a table (id int, amount numeric(10,2))
insert into @a values (1, null), (2,null), (3,null)
set xact_abort off
select AVG(amount)
from @a
SELECT NULL AS Exit
,而没有为该列指定数据类型,这是真正的问题。应该像这样:SELECT CAST(NULL AS FLOAT) AS Exit
。 - Lamak