2011-10-11 3 views
0

지난 며칠 동안 처리해야했던 또 다른 문제가 있습니다. 모듈에 대한상위 쿼리를 기반으로 단일 결과로 반환 된 중첩 쿼리의 평균을 얻는 방법

SELECT S.Name,S.Surname,S.Student_ID,S.StudentNumber,C.Course, B.Campus_Title,M.Module,SM.Percentage_Obtained,S.Days_Absent, 
     (SELECT AVG(Percentage_Obtained) 
     FROM Student_Modules 
     INNER JOIN Courses_Template 
     ON Courses_Template.ID = Student_Modules.CourseID 
     INNER JOIN Modules_Template 
     ON Courses_Template.ID = Modules_Template.CourseID 
     WHERE Modules_Template.Module= M.Module)[AS Class Average] 
FROM Students S 
INNER JOIN Student_Courses SC 
ON SC.StudentID = S.ID 
INNER JOIN Courses_Template C 
ON C.ID = SC.courseID 
INNER JOIN Branches B 
ON B.ID = S.BranchID 
INNER JOIN Student_Modules SM ON 
SM.StudentID =S.ID 
INNER JOIN Modules_Template M ON 
M.ID = SM.ModuleID 

원래 값이 (추출)되는

:

SELECT S.Name,S.Surname,S.Student_ID,S.StudentNumber,C.Course, B.Campus_Title,M.Module,SM.Percentage_Obtained,S.Days_Absent 
FROM Students S 
INNER JOIN Student_Courses SC 
ON SC.StudentID = S.ID 
INNER JOIN Courses_Template C 
ON C.ID = SC.courseID 
INNER JOIN Branches B 
ON B.ID = S.BranchID 
INNER JOIN Student_Modules SM ON 
SM.StudentID =S.ID 
INNER JOIN Modules_Template M ON 
M.ID = SM.ModuleID 

문제는이 같은 계산 결과를 얻기 위해 쿼리를 재 작성 할 것입니다 : 나는 다음과 같은 쿼리를 가지고 내가 두 번째 쿼리에서 원하는

M.Modules AVG(Percentage_Obtained) 

Module 1 99 
Module 2 98 
Module 3 94 
Module 1 94 
Module 2 22 
Module 3 100 

예상되는 결과는이

M.Modules AVG(Percentage_Obtained) (SubQuery's Average) 
Module 1 99       97 
Module 2 98       60 
Module 3 94       96 
Module 1 94       97 
Module 2 22       60 
Module 3 100       96 
했다

그러나, 그것은 나에게 준 무슨 일이

내가 두 번째 쿼리에서 원이

M.Modules AVG(Percentage_Obtained) (SubQuery's Average) 
Module 1 99       84 
Module 2 98       84 
Module 3 94       84 
Module 1 94       84 
Module 2 22       84 
Module 3 100       84 

사람이 아마도 어딘가에서 내 실수를 발견 할 수 있었다 예상되는 결과를 완전히 다른 무언가가 있었다? 하나의 쿼리로 모든 필드를 필요로합니다. 보고서를 작성해야하기 때문입니다. 서브 쿼리의 결과는 매우 중요하다

그 나는 필요가 거의 같은이 (하지만 동적으로 모듈의 모든 재발에 대한) :

SELECT AVG(Percentage_Obtained) 
FROM Student_Modules 
INNER JOIN Modules_Template ON Modules_Template.ID = Student_Modules.ModuleID 
WHERE Modules_Template.Module = 'Module 1' -- And module 2, and module 3 .... but Dynamically 

답변

1

다음과 같은 쿼리를 시도 할 수 있습니다 : 내가 할 수있는 경우

SELECT S.Name,S.Surname,S.Student_ID,S.StudentNumber,C.Course, B.Campus_Title,M.Module,SM.Percentage_Obtained,S.Days_Absent, SM2.AvgPercentage_Obtained 
FROM Students S 
INNER JOIN Student_Courses SC 
ON SC.StudentID = S.ID 
INNER JOIN Courses_Template C 
ON C.ID = SC.courseID 
INNER JOIN Branches B 
ON B.ID = S.BranchID 
INNER JOIN Student_Modules SM ON 
SM.StudentID =S.ID 
INNER JOIN Modules_Template M ON 
M.ID = SM.ModuleID 
OUTER APPLY (SELECT AVG(Percentage_Obtained) AvgPercentage_Obtained 
      FROM Student_Modules 
      INNER JOIN Modules_Template ON Modules_Template.ID = Student_Modules.ModuleID 
      WHERE Student_Modules.Module = M.Module) SM2 
+0

을 나는 지금 너를 키스 할 것이다 !!!! 감사합니다. 당신은 저것과 함께 나의 가죽을 구했습니다. 연구 외측 연구가 가능한 한 빨리 적용됩니다. – Eon

+0

@EonRustedduPlessis - 그럴 필요는 없습니다 ;-). 대답이 잘되어서 기쁩니다. – Lamak

+0

잘 작동했습니다. Student_Modules.Module = M.Module은 WHERE Student_Modules.ModuleID = M.ID – Eon

관련 문제