【发布时间】:2014-08-08 02:50:04
【问题描述】:
我有一个问题
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”的评分。
我怎样才能让它只计算 rating[x] 不等于 '0' 的评级? 它仍然会计数,但除了将其除以 5 之外,它将除以有多少列不是“0”。
我创建了一个http://sqlfiddle.com/#!3/570fa/7>
【问题讨论】:
-
如果你规范化你的模式,你的生活会更轻松:你有一个“重复组”,它应该在它自己的子表中,每个评级都在单独的行中
-
具体表达式取决于我们是否保证 ratingN 始终为非 NULL,或者取决于如何处理来自
cast(ratingN As Float)的 NULL 值。
标签: sql sql-server-2008