2016-03-07 114 views
3

我想将两条sql语句合并成一条,但没有成功。在一条SQL语句中加入多条select语句

我理想上喜欢将Ave​​rage查询添加到第一个sql语句的列末尾。

首先声明:

SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription 
FROM Module_Info 
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification ON Modules.MarkCodeDescription = MarkClassification.MarkId 
WHERE(Modules.UserID = '8') 

其次声明:

SELECT AVG(Modules.ExamMark) AS Average  
FROM Module_Info  
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
WHERE (Modules.ModuleID = '2') 
+0

如果您喜欢,请考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您还没有这样做,请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry

回答

3

您可以选择使用子查询,像这样:

SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, 
     Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription, 
     (SELECT AVG(Modules.ExamMark) 
     FROM Module_Info 
     INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
     WHERE (Modules.ModuleID = '2')) as Average 
FROM Module_Info 
INNER JOIN Modules 
ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification 
ON Modules.MarkCodeDescription = MarkClassification.MarkId 
WHERE(Modules.UserID = '8') 
+0

感谢您的回答,当我运行查询时,您提示我收到以下内容:Msg 156,Level 15,State 1,第6行 关键字'AS'附近的语法不正确。 –

+1

@RichardQuinn对不起,错字..错过了一个'(',现在试试 – sagi

+0

什么是英雄,那工作:)干杯 –

2

你可以试试

SELECT * FROM 

(SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription 
FROM Module_Info 
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification ON Modules.MarkCodeDescription = MarkClassification.MarkId 
WHERE(Modules.UserID = '8')) t1 

JOIN 

(SELECT AVG(Modules.ExamMark) AS Average 
FROM Module_Info 
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
WHERE (Modules.ModuleID = '2')) t2 

由于您没有连接条件,它将创建两个查询的笛卡尔乘积(即,第一子查询的每一行,第二子查询的每一行)。由于第二个子查询只有一行,它会给你预期的结果。

+0

感谢一旦我运行它的答案我得到以下内容:消息102,级别15,状态1,线12 't2'附近语法不正确。 –

+1

尝试将'on 1 = 1'添加为'always true'连接条件 –