2012-12-18 109 views
1

可能重复:
Average and Case in SQLAVG和CASE SQL Server 2008中

我使用SQL Server 2008和试图生成报告和下面的代码不会产生预期的结果这给了我两条线而不是一条线。 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', 
+0

发布你的结果和你的确切代码 –

+1

如果你问一个问题,它没有得到适当的答案,这表明您需要*改进*您的问题 - 尝试添加更多信息,回复示例输入和输出的请求等。然后*编辑*您现有的问题与此信息。不要再问同样的问题。 –

回答

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

不知道你想要什么输出。如果只是1行:

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 
+0

其实我只是在寻找一行。您提供的代码非常有用。 – user1860212