我遇到的问题似乎来自我的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