C# 平均存储过程中的空列数

C# 平均存储过程中的空列数,c#,asp.net,sql,stored-procedures,C#,Asp.net,Sql,Stored Procedures,我有一个存储过程,我想计算空列的平均值 这是我的存储过程: SELECT AVG(planned) AS Planned, AVG(achieved) AS Achieved FROM Port INNER JOIN Technology ON Port.portID = Technology.portRef 我使用datasource将此存储过程绑定到图表,当该列为null时,C代码抛出以下错误: 值对于小数来说太大或太小 如何处理存储过程以平均这

我有一个存储过程,我想计算空列的平均值

这是我的存储过程:

SELECT 
    AVG(planned) AS Planned,
    AVG(achieved) AS Achieved 
FROM 
    Port 
INNER JOIN 
    Technology ON Port.portID = Technology.portRef 
我使用datasource将此存储过程绑定到图表,当该列为null时,C代码抛出以下错误:

值对于小数来说太大或太小


如何处理存储过程以平均这些空列?

当查询不返回任何值时,会发生这种情况。用这个

SELECT 
    coalesce(avg(planned),0) as Planned,
    coalesce(avg(achieved),0) as Achieved 
FROM 
    Port inner join Technology on Port.portID = Technology.portRef 
另一种方式

SELECT avg(isnull(planned,0))as Planned,avg(isnull(achieved,0))  as Achieved 
FROM Port inner join Technology on Port.portID = Technology.portRef 
使用关键字unpivot


如果所有列都为null,它将不会返回任何内容。

我看到一些人对使用ISNULL还是COALESCE感到困惑。 我强烈建议合并。在某些情况下,两者都可以正常运行,但在某些情况下,如果处理不当,ISNULL将给出错误的输出

请检查以下代码段:

SELECT  
    ISNULL(Nullif('test', 'test'), '12345') AS using_isnull,
    COALESCE(Nullif('test', 'test'), '12345') AS using_coalesce,
    ISNULL(Nullif('test', 'test'), 12345) AS int_using_isnull,
    COALESCE(Nullif('test', 'test'), 12345) AS int_using_coalesce

你希望AVGnull返回什么?你所说的平均空列是什么意思,你认为空列的平均值是多少?我不知道这是否正确,是否应该是avgcoalesceplaned,0?目前,它是对列求平均值,然后查看它是否为空。难道不应该看看这个值是否为NULL,然后通过将NULL值解释为0来求平均值吗?@phillyd-你需要问OP这个问题。你真的不应该做任何事;NULL是一个未知或缺少的值,它肯定不是0,因此平均值函数做得很好。但是OP不能在他们的C代码中处理这个问题,所以OP需要指定使用哪种软糖。不是因为平均值函数是错误的,或者使用联合是正确的,而是因为OP要求一个伪造,但没有指定他们希望结果如何伪造。@Dems绝对-我的下一个问题是:将NULL解释为0是你想要的吗?它将被用来计算平均值,使数字与应该缺失的值发生偏差。我明白你关于AVG的意思了,我想这是把空值看作是缺少的值。总之,如果表中没有数据或查询不返回任何行,那么所有聚合都返回空值。请参见此示例declare@t tablecol int select avgcol,sumcol from@t
SELECT  
    ISNULL(Nullif('test', 'test'), '12345') AS using_isnull,
    COALESCE(Nullif('test', 'test'), '12345') AS using_coalesce,
    ISNULL(Nullif('test', 'test'), 12345) AS int_using_isnull,
    COALESCE(Nullif('test', 'test'), 12345) AS int_using_coalesce