объединить два SQL-запроса

#sql

#sql

Вопрос:

 SELECT Student.S_ID, COUNT(*) AS **Final_Exam_Level**
FROM Student, Exams, Exam_Allocation
WHERE (Student.S_ID)=Exam_Allocation.S_ID
  And ((Exams.Exam_ID)=Exam_Allocation.Exam_ID)
  And (Exams.Date_Taken) <= #12/31/2010#
GROUP BY Student.S_ID, Student.Course_Level
ORDER BY Student.S_ID;
  

 SELECT Student.S_ID AS S_ID, Student.First_Name AS First_Name, Student.Surname AS Surname, MAX(New_Models.Date_Issued) AS Last_Course_Date, MAX(New_Models.Issue) AS Last_Issue, MAX(New_Models.Model_ID) AS Last_Model_ID, Student.Course_Level AS No_Training_Courses
FROM New_Models, New_Models_Allocation, Student
WHERE New_Models.Model_ID=New_models_Allocation.Model_ID And Student.S_ID=New_Models_Allocation.S_ID
GROUP BY Student.S_ID, Student.Course_Level, First_Name, Surname
ORDER BY MAX(New_Models.Model_ID) DESC;
  

Как я могу добавить Final_Exam_Level во второй запрос?

Final_Exam_Level подсчитывает, сколько Exam_ID выполнил каждый студент. Exam_Allocation имеет два внешних ключа, S_Id и Exam_ID

 select Query_New_Models.*, Query_Exam.Final_Exam_Level
FROM (SELECT Student.S_ID AS S_ID, Student.First_Name AS First_Name, Student.Surname AS Surname, MAX(New_Models.Date_Issued) AS Last_Course_Date, MAX(New_Models.Issue) AS Last_Issue, MAX(New_Models.Model_ID) AS Last_Model_ID, Student.Course_Level AS No_Training_Courses
FROM New_Models, New_Models_Allocation, Student
WHERE New_Models.Model_ID=New_models_Allocation.Model_ID And Student.S_ID=New_Models_Allocation.S_ID
GROUP BY Student.S_ID, Student.Course_Level
ORDER BY MAX(New_Models.Model_ID) DESC)             INNER JOIN         (SELECT      Student.S_ID, COUNT(*) AS Final_Exam_Level
FROM Student, Exams, Exam_Allocation
WHERE (Student.S_ID)=Exam_Allocation.S_ID
And ((Exams.Exam_ID)=Exam_Allocation.Exam_ID)
And (Exams.Date_Taken)<=#12/31/2010#
GROUP BY Student.S_ID, Student.Course_Level
ORDER BY Student.S_ID
) ON  Query_Exam.S_ID = Query_New_Models.S_ID ;
  

Комментарии:

1. Извините, но эти запросы возвращают (очень) разное количество столбцов… итак, как вы можете их объединить?

2. Возможно, было бы проще, если бы вы указали, какой цели вы пытаетесь достичь, кроме «объединить эти два запроса». Как должен выглядеть результирующий набор данных?

3. я хочу добавить один столбец в другой. Хотя они имеют одинаковое количество записей. Они оба показывают подробную информацию о техническом специалисте

4. Итак, каков ожидаемый результат в итоге??? КАК вы хотите объединить эти два запроса??

5. Как я могу показать вам снимок экрана того, что я хочу?

Ответ №1:

Просто превратите их оба в подзапросы более высокого запроса

  select Second.*, First.Final_Exam_Level
   from (Your Second Query Here) Second
            inner join
        (Your First Query Here) First    on First.Technician_ID = Second.Technician_ID
  

Комментарии:

1. Я не думаю, что они оба должны быть производными таблицами, вы должны иметь возможность присоединять 1-й запрос (как производную таблицу) непосредственно ко 2-му

2. Ранее я пытался включить поля из первого во второе, но это показало неправильные результаты.

3. Не могли бы вы, пожалуйста, проверить SQL, который я добавил к своему сообщению, из того, что я понял из того, что вы сказали. Извините, но я мало что знаю о SQL. Я очень ценю вашу помощь

4. Я не понимаю, как выполнить команду ON. поскольку я не думаю, что могу назвать подзапросы КАК первый и второй

5. то, что я написал, будет работать на Microsoft SQL Server, если вы используете что-то другое, вы можете пометить свой вопрос mysql или postgresql или любой другой соответствующей технологией. Синтаксис join в них может немного отличаться, но вы могли бы просто посмотреть, как выполнить подзапрос в вашем конкретном случае.