平均和案例在SQL(Average and Case in SQL)

2019-08-04 06:49发布

我试图生成报告和下面的代码不会产生预期的结果,给了我2号线,而不是一个。

所述ScoreTypeID可以具有的22,52,3个或4个值。 如果是22或52,我需要的平均,如果没有我需要显示为0。任何想法可能是什么问题呢? 谢谢。

  CASE WHEN FAS1.ScoreTypeID = 22 THEN avg(fas1.totalscore)  
       WHEN FAS1.ScoreTypeID = 52 THEN avg(fas1.totalscore)   ELSE 0    
  END  AS   'Total Score',   

Answer 1:

我认为,在完整的查询,你缺少的GROUP BY子句中,如

SELECT ...
FROM   ....
WHERE   ..
GROUP BY FAS1.ScoreTypeID


Answer 2:

我认为这是你想要什么:

 coalesce(avg(CASE WHEN FAS1.ScoreTypeID in (22, 52) THEN fas1.totalscore end), 0) AS   'Total Score'

这需要的平均时分数为22或52。如果没有值存在,则返回NULL。 聚结转动NULL成0。



Answer 3:

为了保持它在你选择,你可以使用以下格式:

CASE WHEN FAS1.ScoreTypeID IN (22,52) THEN avg(fas1.totalscore) ELSE 0
  END  AS   'Total Score', 


文章来源: Average and Case in SQL