2017-09-20 7 views
0

以下のように、結合とサブクエリを含むSQLクエリを更新して、のマークを得ることができます。ExamID = 1ExamID = 3も最終結果セットに含まれますか? CTEはあなたの両方の試験をしたこれらの学生を与えるこのクエリは、ExamID 1とExamID 3に合格した生徒の詳細を出力します。各試験で得られたマークも表示します。どうやって?

WITH BothCTE 
(
    SELECT stm.StudentID 
    FROM StudentMarks stm 
    INNER JOIN Exam ex ON stm.ExamID=ex.ExamID 
    WHERE stm.Mark >= ex.MinMarkForPass AND stm.ExamID IN(1, 3) 
    GROUP BY StudentID 
    HAVING(DISTINCT ExamID) >= 2 
) 
SELECT st.StudentID, st.Name, stm.Mark 
FROM Students st 
INNER JOIN StudentMarks stm ON st.StudentID = stm.StudentID 
WHERE st.StudentID IN(SELECT StudentID FROM BothCTE); 

、その後、あなたが取得するマークテーブルで、これらの結果を結合することができます。

SELECT DISTINCT st.StudentID,st.Name 
FROM Students st 
INNER JOIN StudentMarks stm ON st.StudentID=stm.StudentID 
WHERE st.StudentID IN(SELECT stm.StudentID 
         FROM StudentMarks stm 
         INNER JOIN Exam ex ON stm.ExamID=ex.ExamID 
         WHERE stm.Mark>=ex.MinMarkForPass AND stm.ExamID=1 
INTERSECT 
SELECT stm.StudentID 
FROM StudentMarks stm 
INNER JOIN Exam ex ON stm.ExamID=ex.ExamID 
WHERE stm.Mark >= ex.MinMarkForPass AND stm.ExamID=3) 
+0

***両方の試験を受験する生徒を望んでいますか***? –

+0

両方の試験に合格した生徒は、上記の質問によって示されます。私は両方の試験にそれぞれ得たマークを示したい。 –

答えて

1

INTERSECTは必要ない、あなたはこれを行うことができます学生の印。

関連する問題