SQL-запрос с объединениями повторяет строку «Данные самого верхнего» для всех остальных строк - PullRequest
0 голосов
/ 22 мая 2018

Следующий запрос SQL извлекает и повторяет данные самой верхней строки для всех остальных строк.

SELECT 
    Student.StuRollNo, Student.StuName, Student.StuFName, 
    (SELECT TOP 1 M.SubjectObtMarks 
     FROM Marking M 
     WHERE M.SubjectID = 'SubUrdu' 
       AND M.ExamID = 1) AS Urdu,
    (SELECT TOP 1 M.SubjectObtMarks 
     FROM Marking M 
     WHERE M.SubjectID = 'SubEng' 
       AND M.ExamID = 1) AS Eng,
    (SELECT TOP 1 M.SubjectObtMarks 
     FROM Marking M 
     WHERE M.SubjectID = 'SubPhy' 
       AND M.ExamID = 1) AS Phy,
    (SELECT TOP 1 M.SubjectObtMarks 
     FROM Marking M 
     WHERE M.SubjectID = 'SubChem' 
       AND M.ExamID = 1) AS Chem,
    (SELECT TOP 1 M.SubjectObtMarks 
     FROM Marking M 
     WHERE M.SubjectID = 'SubBio' 
       AND M.ExamID = 1) AS Bio,
    (SELECT TOP 1 M.SubjectObtMarks 
     FROM Marking M 
     WHERE M.SubjectID = 'SubIsl' 
       AND M.ExamID = 1) AS Isl,
    (SELECT TOP 1 SUM(Marking.SubjectObtMarks) 
     FROM Marking 
     WHERE ExamID = 1) AS ObtMarks
FROM 
    Exam, Student 
INNER JOIN 
    PrimaryData ON Student.StuRollNo = PrimaryData.StuID 
INNER JOIN 
    Section ON Section.SectionID = PrimaryData.SectionID 
WHERE 
    Section.SectionName = 'M1' 
    AND Exam.ExamID = 1;

Вот что он получает:

Problem Pic

Диаграмма базы данных:

DB Diagram

Пожалуйста, помогите мне решить эту проблему.Спасибо!

1 Ответ

0 голосов
/ 22 мая 2018

Это потому, что вы не ограничиваете, кому принадлежит маркировка ученика.Таким образом, ваш запрос по сути всегда выбирает первую маркировку, а не проверяет, кому принадлежит эта маркировка.

SELECT 
Student.StuRollNo, Student.StuName, Student.StuFName, 
(SELECT TOP 1 M.SubjectObtMarks 
 FROM Marking M 
 WHERE M.SubjectID = 'SubUrdu' 
   AND M.ExamID = 1
   AND M.StuID = S.StuID) AS Urdu
FROM 
    Exam, Student S
INNER JOIN 
    PrimaryData ON Student.StuRollNo = PrimaryData.StuID 
INNER JOIN 
    Section ON Section.SectionID = PrimaryData.SectionID 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...