我有一个存储过程,我想平均空列。
这是我的存储过程:
SELECT
AVG(planned) AS Planned,
AVG(achieved) AS Achieved
FROM
Port
INNER JOIN
Technology ON Port.portID = Technology.portRef
我使用datasource将此存储过程绑定到图表,当列为null时,C#代码会抛出此错误:
对于十进制,值太大或太小。
如何处理avg
空列的存储过程?
答案 0 :(得分:4)
当查询未返回任何值时会发生这种情况。使用此
SELECT
coalesce(avg(planned),0) as Planned,
coalesce(avg(achieved),0) as Achieved
FROM
Port inner join Technology on Port.portID = Technology.portRef
答案 1 :(得分:2)
另一种方式
SELECT avg(isnull(planned,0))as Planned,avg(isnull(achieved,0)) as Achieved
FROM Port inner join Technology on Port.portID = Technology.portRef
答案 2 :(得分: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
,则它不会返回任何内容。
答案 3 :(得分: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