2016-03-07 2 views
3

Я пытаюсь объединить два оператора sql в один, но не имел успеха.Объединение операторов множественного выбора в одном операторе SQL

Я бы идеально хотел, чтобы средний запрос добавлялся в конец столбцов из первого оператора 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 Извините, опечатка .. missed a '(', попробуйте сейчас – 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

спасибо за ответ, как только я запустил его, я получаю следующее: Msg 102, Level 15, State 1, Line 12 Неверный синтаксис рядом с 't2'. –

+1

Попробуйте добавить «on 1 = 1» в качестве условия «всегда истинного» соединения –