0

我正在尝试生成报告,但以下代码没有产生所需的结果,这给了我 2 行而不是 1 行。

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',   
4

3 回答 3

3

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

SELECT ...
FROM   ....
WHERE   ..
GROUP BY FAS1.ScoreTypeID
于 2012-12-18T14:49:18.693 回答
1

要将其保持为您选择的格式,您可以使用:

CASE WHEN FAS1.ScoreTypeID IN (22,52) THEN avg(fas1.totalscore) ELSE 0
  END  AS   'Total Score', 
于 2012-12-18T15:02:57.777 回答
1

我认为这就是你想要的:

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

这取分数为 22 或 52 时的平均值。如果不存在任何值,则返回 NULL。合并将 NULL 变为 0。

于 2012-12-18T14:54:17.777 回答