我必须找到所有有超过33分的学生,但似乎找不到特定科目中少于33分的学生......!
SELECT DISTINCT tbl_Users.strfname + ' ' + tbl_Users.strlname AS 'Teacher Name'
, tbl_Subject.strSubject AS Subject
, tbl_Subject.strCourseCode AS 'Course Code'
, tbl_Class.strClass AS Class
, COUNT(CAST(tbl_Result_1.strObtMarks AS float) / CAST(tbl_Result_1.strTotalMarks AS float) * 100) AS Pass
FROM tbl_Users
INNER JOIN tbl_Result AS tbl_Result_1
INNER JOIN tbl_Class
INNER JOIN tbl_TeacherSubject ON tbl_Class.nc_id = tbl_TeacherSubject.nc_id ON tbl_Result_1.nc_id = tbl_Class.nc_id ON tbl_Users.nu_id = tbl_Result_1.nu_id
INNER JOIN tbl_Subject ON tbl_Result_1.nsbj_id = tbl_Subject.nsbj_id
WHERE (tbl_Users.nsch_id = @sch)
AND (tbl_Class.nsch_id = @sch)
AND (tbl_Subject.nsch_id = @sch)
AND (CAST(tbl_Result_1.strObtMarks AS float) / CAST(tbl_Result_1.strTotalMarks AS float) * 100 >=
(SELECT CAST(strPercentage AS float) AS Expr1
FROM tbl_Percentage AS tbl_Percentage_1
WHERE (nsch_id = @sch)))
AND (tbl_Result_1.bisDeleted = @fbit)
AND (tbl_Class.bisDeleted = @fbit)
AND (tbl_TeacherSubject.bisDeleted = @fbit)
AND (tbl_Users.bisDeleted = @fbit)
AND (tbl_Subject.bisDeleted = @fbit)
AND (tbl_TeacherSubject.nsch_id = @sch)
AND (tbl_Result_1.nsch_id = @sch)
AND (tbl_Result_1.nExam_id = @exam)
AND (tbl_Result_1.nsbj_id = @sub)
AND (SUBSTRING(tbl_Result_1.dtAddDate, 7, 4) = @txtdate)
GROUP BY tbl_Users.strfname, tbl_Users.strlname, tbl_Subject.strSubject, tbl_Subject.strCourseCode, tbl_Class.strClass, tbl_TeacherSubject.nsch_id, tbl_Result_1.nsch_id, tbl_Result_1.nExam_id, tbl_Result_1.nsbj_id
ORDER BY Pass DESC
答案 0 :(得分:1)
I am not sure what your situation is, but perhaps this helps you.
your line:
WHERE ... * 100 >=
here you check for 'bigger or equal than'.
to check for 'less than' just use:
WHERE ... * 100 <
答案 1 :(得分:1)
我试图简化您的查询。
SELECT [Teacher Name],
[Subject],
[Course Code],
[Class],
COUNT(*) AS [Pass Count]
FROM (
SELECT tbl_Users.strfname + ' ' + tbl_Users.strlname AS [Teacher Name],
tbl_Subject.strSubject AS [Subject],
tbl_Subject.strCourseCode AS [Course Code],
tbl_Class.strClass AS [Class],
CAST(tbl_Result_1.strObtMarks AS float) / CAST(tbl_Result_1.strTotalMarks AS float) * 100 AS MarkPct,
CAST(strPercentage AS float) AS PassPct
FROM tbl_Users
INNER JOIN tbl_Result AS tbl_Result_1 ON tbl_Users.nu_id = tbl_Result_1.nu_id
AND tbl_Users.nsch_id = tbl_Result_1.nsch_id
AND tbl_Users.bisDeleted = tbl_Result_1.bisDeleted
INNER JOIN tbl_Subject ON tbl_Result_1.nsbj_id = tbl_Subject.nsbj_id
AND tbl_Users.nsch_id = tbl_Subject.nsch_id
AND tbl_Users.bisDeleted = tbl_Subject.bisDeleted
INNER JOIN tbl_Class ON tbl_Result_1.nc_id = tbl_Class.nc_id
AND tbl_Users.nsch_id = tbl_Class.nsch_id
AND tbl_Users.bisDeleted = tbl_Class.bisDeleted
INNER JOIN tbl_TeacherSubject ON tbl_Class.nc_id = tbl_TeacherSubject.nc_id
AND tbl_Users.nsch_id = tbl_TeacherSubject.nsch_id
AND tbl_Users.bisDeleted = tbl_TeacherSubject.bisDeleted
INNER JOIN tbl_Percentage ON tbl_Users.nsch_id = tbl_Percentage.nsch_id
WHERE tbl_Users.nsch_id = @sch
AND tbl_Users.bisDeleted = @fbit
AND tbl_Result_1.nExam_id = @exam
AND tbl_Result_1.nsbj_id = @sub
AND SUBSTRING(tbl_Result_1.dtAddDate, 7, 4) = @txtdate
) x
WHERE MarkPct >= PassPct
GROUP BY [Teacher Name],
[Subject],
[Course Code],
[Class]