Tsql 如何获取基于父查询作为单个结果返回的嵌套查询的平均值

Tsql 如何获取基于父查询作为单个结果返回的嵌套查询的平均值,tsql,aggregate-functions,aggregate,Tsql,Aggregate Functions,Aggregate,这是过去几天我不得不处理的另一个问题。我有以下疑问: 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

这是过去几天我不得不处理的另一个问题。我有以下疑问:

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
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
问题是我想重写查询以获得如下计算结果:

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
模块的原始值为(提取)

我希望从第二个查询中得到以下结果

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
然而,它给了我完全不同的东西

我希望从第二个查询中得到以下结果

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 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
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

如果可以,我现在就吻你!!!!非常感谢。你救了我的命。我会尽快申请的,我不知道it@EonRustedduPlessis-没有必要那样做;-)。我很高兴这个答案起作用了。它起作用了。只是,Student_Modules.Module=M.Module的最后一行应该是Student_Modules.ModuleID=M.IDModuleID是Modules.ID的外键