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