Новая версия, включающая все предметы, посещаемые учителем
SELECT u.subject_code, u.subject_title, count(s.class_no) as attended , tc.t_count total, CONCAT(FORMAT(100 * count(s.class_no) / tc.t_count, 0), '%') '%att'
FROM subjects u
LEFT JOIN teacher_attendance t ON t.subject_code = u.subject_code
JOIN (SELECT subject_code, COUNT(*) t_count FROM teacher_attendance GROUP BY subject_code) tc ON tc.subject_code = u.subject_code
LEFT JOIN student_attendance s ON t.class_no = s.class_no AND s.student_id = 'mca1701'
WHERE semester = 3
GROUP BY u.subject_code, u.subject_title
Я использовал отдельный подзапрос для подсчета общей стоимости. (Я пропустил таблицу предметов, но ее легко добавить)
SELECT t.subject_code, count(t.class_no) as attended , tc.t_count total, CONCAT(FORMAT(100 * count(t.class_no) / tc.t_count, 0), '%') %att
FROM student_attendance s
JOIN teacher_attendance t ON t.class_no = s.class_no
JOIN (SELECT subject_code, COUNT(*) t_count FROM teacher_attendance GROUP BY subject_code) tc ON tc.subject_code = t.subject_code
WHERE student_id='mca1701'
GROUP BY subject_code
Да, Вы можете. Посмотрите на очевидное место: HttpContext и HttpContext.Current.Items
набор, который всегда доступен во время обработки запроса (см. http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx).
Так же, как подсказка:
public static class RequestScopedData
{
private const string key = "key_that_you_choose";
public static bool IsSaving
{
get
{
object o = HttpContext.Current.Items[key];
return Convert.ToBoolean(o);
}
set
{
HttpContext.Current.Items[key] = value;
}
}
}