Я пытался повторить это утверждение, но безрезультатно.
SELECT b.Program AS Program,
SUM(CASE WHEN a.Gender LIKE 'M%' THEN 1 ELSE NULL END) AS Males,
SUM(CASE WHEN a.Gender LIKE 'F%' THEN 1 ELSE NULL END) AS Females,
SUM(CASE WHEN e.Activity LIKE 'Arts' THEN 1 ELSE NULL END) AS Arts,
AVG(CASE WHEN a.Gender LIKE 'M%' THEN CAST(f.Score AS DEC(10,2)) ELSE NULL END)
AS MalesAverage
FROM tblChildren a
LEFT JOIN tblInvolvement b ON b.ChildID = a.ChildID
LEFT JOIN tblActivities e ON e.ChildID = b.ChildID
LEFT JOIN tblScores f ON f.ChildID = b.ChildID
WHERE b.Place = 'Location'
AND b.Program = 'Program'
AND b.Year = '2009-10'
AND f.Assessment LIKE '%Pre%Assessment%'
AND e.StudentID = b.StudentID
GROUP BY Program
Теперь я получу результаты как:
Program Males Females Arts MalesAverage
---------------------------------------
Program 7 5 1 50.000000
Проблема в том, что есть только 4 мужчины и 3 женщины, и что, когда я добавляю tblActivites, это, кажется, дает дубликаты. После просмотра я заметил, что в таблице «Деятельности» было 12 идентификаторов ChildID. Причина в том, что эти Дети были привязаны к более чем одному виду деятельности. Я пытался использовать что-то вроде:
SELECT SUM( DISTINCT CASE WHEN a.Gender LIKE 'M%' THEN 1 ELSE NULL END) AS Males
Однако он только что вернул 1 в столбце «Мужчины». Любая помощь будет оценена. И просто чтобы уточнить, таблицы объединяются с помощью ChildID, мне просто нужна помощь, чтобы убедиться, что я возвращаю правильную информацию. Если это будет решено, то мой огромный список этих вещей будет решен. Избегать использования GROUP BY для всего, потому что у меня много данных.