Access/VBA
Sub QueryStudentsByGroup()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim groupName As String
Dim sql As String
' Задаем имя группы для выборки
groupName = "Группа A" ' Здесь можно указать любую группу
' SQL-запрос для формирования списка студентов с сортировкой и подсчетом
sql = "SELECT Students.LastName, Students.FirstName, Students.MiddleName, " & _
"Students.Gender, Students.DateOfBirth, Groups.GroupName, Teachers.FullName AS ClassTeacher, " & _
"MONTH(Students.DateOfBirth) AS BirthMonth, " & _
"(SELECT COUNT(*) FROM Students AS S WHERE MONTH(S.DateOfBirth) = MONTH(Students.DateOfBirth)) AS BirthdayCount " & _
"FROM (Students " & _
"INNER JOIN Groups ON Students.GroupID = Groups.GroupID) " & _
"INNER JOIN Teachers ON Groups.ClassTeacherID = Teachers.TeacherID " & _
"WHERE Groups.GroupName = '" & groupName & "' " & _
"ORDER BY Students.DateOfBirth;"
' Открываем набор записей
Set db = CurrentDb()
Set rs = db.OpenRecordset(sql, dbOpenSnapshot)
' Вывод результата в окно Immediate (Ctrl+G)
Debug.Print "Список студентов группы: " & groupName
Debug.Print "Фамилия | Имя | Отчество | Пол | Дата рождения | Классный руководитель | Месяц рождения | Именинников в месяце"
Do While Not rs.EOF
Debug.Print rs!LastName & " | " & rs!FirstName & " | " & rs!MiddleName & " | " & rs!Gender & " | " & _
rs!DateOfBirth & " | " & rs!ClassTeacher & " | " & rs!BirthMonth & " | " & rs!BirthdayCount
rs.MoveNext
Loop
' Закрываем набор записей
rs.Close
Set rs = Nothing
Set db = Nothing
MsgBox "Запрос выполнен. Результаты в окне Immediate (Ctrl+G).", vbInformation
End Sub
Result
Список студентов группы: Группа A
Фамилия | Имя | Отчество | Пол | Дата рождения | Классный руководитель | Месяц рождения | Именинников в месяце
Смирнов | Алексей | Игоревич | M | 15.04.2003 | Иванов Иван Иванович | 4 | 1
Сидорова | Анна | Владимировна | F | 25.11.2003 | Иванов Иван Иванович | 11 | 1