Проблема, которая у меня возникает, кажется, возникла из моего предложения 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 и почти идентичному «Tests» предложению where, он дает мне значения NULL для всего и 0 для COUNT.Приведенный выше код работает правильно, но используемый мной тест имеет очень похожие имена, и таблица была составлена плохо, поэтому все имена «тестов» находятся в одном столбце.Я не могу отладить, поскольку я застрял с использованием 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.