2012-12-18 171 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