我遇到的問題似乎來自我的where子句和硬編碼。 我有兩個表,一個是ID,另一個是ID和ID。SQL WHERE子句問題
所以我的代碼看起來有點像這樣:
SELECT AVG(CAST(c.Score AS DEC(10,2))) AS avgTestC,
AVG(CAST(d.Score AS DEC(10,2))) AS avgTestD,
AVG(CAST(e.Score AS DEC(10,2))) AS avgTestE,
AVG(CAST(f.Score AS DEC(10,2))) AS avgTestF,
COUNT(DISTINCT c.ID) AS CountC,
COUNT(DISTINCT d.ID) AS CountD,
COUNT(DISTINCT e.ID) AS CountE,
COUNT(DISTINCT f.ID) AS CountF
FROM tblWithIds a,
JOIN tblScores b ON a.ID = b.ID AND b.Year = @Year
LEFT JOIN tblScores c ON a.ID = c.ID AND c.Year = @Year
LEFT JOIN tblScores d ON a.ID = d.ID AND d.Year = @Year
LEFT JOIN tblScores e ON a.ID = e.ID AND e.Year = @Year
LEFT JOIN tblScores f ON a.ID = f.ID AND f.Year = @Year
WHERE c.TestC = 'Test C'
d.TestD = 'Test D'
e.TestE = 'Test E'
f.TestF = 'Test F'
現在的問題是,當我增加更多的where子句和幾乎相同的「測試」 where子句,它給了我NULL值COUNT的一切和0。上面的代碼正常工作,但我使用的測試名稱非常相似,表格做得很差,因此所有「測試」名稱都在一列中。我無法調試,因爲現在我被困在MSSQL 05中。請幫忙!
編輯:使用下面的聚合函數SUM從EricZ越來越之後,如果任何人有興趣我發現
AVG(CASE WHEN b.Test = 'Test D' THEN CAST(b.Score AS DEC(10,2)) ELSE NULL END) AS avgTestC
是對AVG聚合函數的正確形式。
這可以工作,但是你並沒有將AVG放在那裏。我不確定如何解決平均部分。 – jnewkirk 2011-06-16 15:55:41
@ Newkirk21我使用AVG更新了查詢 – EricZ 2011-06-16 16:19:23
謝謝大聲笑我實際上已經在指定的時間計算出來了:P但它的工作原理和感謝! – jnewkirk 2011-06-16 16:27:13