2017-03-01 85 views
0

我有两个查询。返回班级平均数,最低成绩和最高成绩。第二个返回特定的学生结果。我试图将这两个查询合并为一个查询,以便显示具体的学生结果以及该班级的最小,最大和平均结果。我试过的任何东西都会导致错误。有没有简单的我失踪?下面的两个查询:返回平均值以及特定行

SELECT Module.ModuleTitle, Module.ModuleDescription, 
MIN(StudentModule.StudentGradeFinal) as lowres, 
MAX(StudentModule.StudentGradeFinal) as topres, 
AVG(CAST(StudentModule.StudentGradeFinal as DECIMAL(9,2))) as averageres 
FROM StudentModule 
join Module on StudentModule.ModuleId = Module.ModuleId 
WHERE Semester = 'Spring' 
AND Module.ModuleId in 
(
SELECT Module.ModuleId FROM Module 
Join StudentModule on Module.ModuleId = StudentModule.ModuleId 
Where StudentId = '40104002' 
) 
GROUP BY Module.ModuleTitle, Module.ModuleDescription 

SELECT Module.ModuleTitle, Module.ModuleDescription, StudentGradeFinal 
FROM StudentModule 
join Module on StudentModule.ModuleId = Module.ModuleId 
WHERE Semester = 'Spring' AND StudentModule.StudentId = '40104002' 
+1

提供样本数据和预期结果。目前还不清楚你想要输出什么。 –

回答

0

如果我理解正确的,你有两个查询始终只返回一个行(平均/最大/最小一个和学生一个细节)。如果你想在一个结果中“合并”它们,你所要做的就是使用这两个查询作为内联视图并将它们加入到总是为真的东西中,比如1 = 1。

所以:

select * from 
(
first query here 
) a 
join 
(
second query here 
) b 
on 1=1 

小心寿 - 确保查询永远只能返回一行,否则你会开始得到笛卡尔的产品和那些产生各种古怪的。

希望它有帮助

+0

有两个模块返回,因此每个查询都有两行。您的建议与链接的两个查询的返回值一起工作。但是,不是返回两个结果,而是四个。具体的学生结果正在被复制。 – user4184963

+0

而不是使用1 = 1在我使用的a.ModuleTitle = b.ModuleTitle 这正是我需要的。谢谢您的帮助!! – user4184963

+0

@ user4184963很高兴帮助! –