「値」が最も低い上位 10 人の学生を表示するテーブルを Web サイトに作成しようとしています。私のデータベースには実際の「値」列はなく、代わりに「grade1」と「grade2」というタイトルの 2 つの列があります。私の目標は、クエリがグレード1またはグレード2の列にあるかどうかにかかわらず、最も低い10の結果を「値」として表示することです。
クエリは次のとおりです。
SELECT TOP 10 p.class, e.teacher, k.notes, s.grade1, s.grade2
, s.gradedmethod, k.studentid
, CASE WHEN s.gradedmethod= 'A' OR s. gradedmethod= 'B' THEN s.grade1
ELSE s.grade2 END AS value
FROM Table1 k
INNER JOIN Table2 p ON p.class = k.class
INNER JOIN Table3 d ON d.tier = p.tier
INNER JOIN Table4 e ON e.teacher = p.teacher
INNER JOIN Table5 s ON k.studentid = s.studentid
WHERE s.examdate IN
(SELECT MAX(st.examdate)
FROM Table5 st
WHERE st.studentid = s.studentid
GROUP BY st.studentid)
AND k.reportcard IS NULL AND (k.cardtype = 'X' OR k.cardtype = 'Y')
ORDER BY value ASC
出力のサンプルを次に示します (編集: GRADE1/GRADE2/VALUE のみを含むように圧縮された結果):
Class/Teacher/Notes/Grade1/Grade2/MeasureMethod/Studentid/Value
NULL/35/NULL
NULL/82/NULL
NULL/88/NULL
NULL/87/NULL
0/100//0
19/21/19
24/13/24
27/40/27
NULL/28/28
33/23/33
ご覧のとおり、値列の最初の 4 つの結果が Grade2 である必要があるときに NULL として表示されているため、何か問題が発生していますが、9 行目では正しく機能していました...
最後に、別の問題は、学生が 3 回以上採点された場合にのみクエリに結果を含めたいことです。*注: grade1 と grade2 は、実際には同じ試験の 2 つのセクションです。すべての生徒が採点した試験は、列 grade1 と grade2 を含む table5 の行です。したがって、同じ学生 ID を持つ行が 3 つ以上ある場合は、その学生を含める必要があります。
私は初心者のプログラマーであり、これを実現する方法がわからず、この時点で私の研究は私をさらに混乱させるだけであるため、この時点でブロックしています。あなたの助けに感謝します。