2

我有一个存储过程,我想平均空列。

这是我的存储过程:

SELECT 
    AVG(planned) AS Planned,
    AVG(achieved) AS Achieved 
FROM 
    Port 
INNER JOIN 
    Technology ON Port.portID = Technology.portRef 

我使用数据源将此存储过程绑定到图表,当列为空时,C# 代码会引发此错误:

对于 Decimal,值太大或太小。

如何处理我的存储过程到avg那些空列?

4

4 回答 4

4

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

SELECT 
    coalesce(avg(planned),0) as Planned,
    coalesce(avg(achieved),0) as Achieved 
FROM 
    Port inner join Technology on Port.portID = Technology.portRef 
于 2012-07-13T08:17:33.940 回答
2

另一种方式

SELECT avg(isnull(planned,0))as Planned,avg(isnull(achieved,0))  as Achieved 
FROM Port inner join Technology on Port.portID = Technology.portRef 
于 2012-07-13T08:21:06.180 回答
0

使用关键字unpivot

select id, AVG(Q)
from (select * from myTable) a
unpivot(Q for QQ IN(Q1,Q2,Q3,Q4,Q5)) b
group by id

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

于 2012-07-13T08:23:45.477 回答
0

我看到有几个人对是否使用ISNULL或感到困惑COALESCE。我强烈推荐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
于 2012-07-13T09:01:10.243 回答