我有一张类似于此的表
+--+-----+----+
|ID|Entry|Exit|
+--+-----+----+
|18|32154|NULL|
+--+-----+----+
|19|NULL |NULL|
+--+-----+----+
当我选择AVG(Entry)时它正确地给了我32154,当我选择AVG(退出)时它会爆炸说"操作数数据类型void类型对于avg操作符无效。"
如何将NULL作为仅具有NULL值的列的平均值?
谢谢,
答案 0 :(得分:2)
尝试像这样使用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
也可以使用
答案 1 :(得分:1)
问题是Exit列没有与SUM函数兼容的数据类型。
如果所有值都为NULL(以及正确的数据类型),您可以运行此查询以确定您确实从SUM中获取了NULL
select sum(a) from (select convert(int, null) a union select null) a
答案 2 :(得分:0)
使用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
答案 3 :(得分:0)
Select avg(isnull(Exit,0)) from table