#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
У меня есть две таблицы, как показано ниже. Я хочу объединить эти две таблицы для даты 2/04/2021, как в выходной таблице. Есть вероятность получить нулевые значения для любой таблицы, как показано на выходе.
student_details
Auto_id StudentID StudentName LastAttendedDate
1 AAA RAGHAV 8/25/2020 1:40:35 AM
2 BBB VARUN 2/04/2021 5:40:23 AM
3 AAA RAGHAV 2/04/2021 1:40:25 AM
4 AAA RAGHAV 2/04/2021 3:40:35 AM
5 BBB VARUN 10/01/2021 9:40:35 AM
6 CCC MAYA 2/04/2021 8:40:35 AM
exam_details
Auto_id StudentID exam_name exam_date
1 AAA PRILIMS 2/04/2021 1:40:35 AM
2 BBB MAINS 2/04/2021 5:40:35 AM
3 AAA PRILIMS 2/04/2021 8:40:35 AM
4 GGG PRILIMS 2/04/2021 1:10:35 AM
5 GGG MAINS 2/04/2021 2:10:35 AM
6 GGG MAINS 2/05/2021 2:10:35 AM
Вывод
StudentID LastAttendedDate exam_name exam_date
BBB 2/04/2021 5:40:23 AM MAINS 2/04/2021 5:40:35 AM
AAA 2/04/2021 1:40:25 AM PRILIMS 2/04/2021 8:40:35 AM
AAA 2/04/2021 3:40:35 AM MAINS 2/04/2021 8:40:35 AM
CCC 2/04/2021 8:40:35 AM NULL NULL
GGG NULL MAINS 2/04/2021 2:10:35 AM
- Должен быть указан идентификатор студента и LastAttendedDate из таблицы ‘student_details’ на дату 2/04/2021,
- max(exam_date) (на дату 2/04/2021) студента должен присоединиться к строкам, если есть.
- Даже если в ‘student_details’ нет данных, он должен показывать max (exam_date) student.
Комментарии:
1. Почему вы используете неподдерживаемую версию SQL Server?
2. Добавьте код T-SQL, который вы пытались выполнить, а не только перечислите свои требования. Ваш вопрос привлечет отрицательные голоса, потому что SO не является сервисом для написания кода.
Ответ №1:
Я думаю, вы хотите full join
, но после объединения двух таблиц:
select coalesce(sd.studentid, ed.studentid) as studentid,
sd.studentname, sd.lastattendeddate,
ed.exam_name, ed.exam_date
from (select studentid, studentname, max(lastattendeddate) as lastattendeddate
from student_details
group by studentid, studentname
) sd full join
(select studentid, exam_name, max(exam_adte) as exam_date
from exam_details
group by studentid, exam_name
) ed
on sd.studentid = ed.studentid;