我有一个查询如何获得列值不等于零的平均值?
Select AVG(((cast(c.rating1 as Float)+ cast(c.rating2 as Float)+cast (c.rating3 as Float)+cast(c.rating4 as Float)+cast(c.rating5 as Float))/5))
From CSEReduxResponses c
Where
c.execoffice_date BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, 0, @today)-1, 0)
AND DATEADD(MONTH, DATEDIFF(MONTH, -1, @today)-1, -1)
AND c.execoffice_status =1
AND C.rating1 <> 0 AND C.rating2 <> 0 AND C.rating3 <> 0 AND C.rating4 <> 0 AND
C.rating5 <> 0
当我得到等级1-5的平均水平,但我还指望收视率,其中等于“0”。
我怎样才能得到它只能算一个等级,其中等级[X]不等于“0”? 它仍然会计数,除了除以5之外,它会将它除以有多少列不是'0'。
我创建了一个< http://sqlfiddle.com/#!3/570fa/7>
如果您标准化架构你的生活会更容易些:你应该是在它自己的子表中的每个等级在一个单独的行 – Bohemian
具体表达取决于是否我们保证“重复组”是ratingN永远是非NULL还是取决于如何处理来自'cast(ratingN As Float)'的NULL值。 – spencer7593