SQL Server 2008中的AVG和CASE

时间:2012-12-18 15:48:53

标签: sql sql-server sql-server-2008 case

  

可能重复:
  Average and Case in SQL

我正在使用SQL Server 2008并尝试生成报告,以下代码不会产生所需的结果,这会给我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',   

2 个答案:

答案 0 :(得分:1)

你没有向我们展示其余的查询,一般来说这应该有效;

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

或;

ISNULL( AVG( case when FAS1.ScoreTypeID in (22,52) then fas1.totalscore
      else null end), 0) as 'Total Score',

答案 1 :(得分:0)

不确定您想要的输出。如果只有一行:

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

如果是2行:(1行为22,1为52)

SELECT FAS1.ScoreTypeID, AVG(fas1.totalscore) FROM ...
WHERE FAS1.ScoreTypeID IN (22, 52)
GROUP BY FAS1.ScoreTypeID