OriginalGriff
Это сложно, потому что, хотя вы считаете, что студент может иметь не более двух курсов, "реальный мир" часто не работает так. Во всяком случае, дизайн, в котором предполагается, что у студента есть только два курса, опасен, потому что это именно то, что меняется позже. Если вы не позволите себе этого, вы сделаете свою жизнь намного, намного сложнее позже.
Это можно сделать - SQL Pivot: преобразование строк в Столбцы - блог Databricks[^] предназначен для этого - но это сложно.
Кроме того, можно обмануть:
SELECT StudentID, MAX(CourseNumber) AS Course1, MIN(CourseNumber) AS Course2
FROM MyTable
GROUP BY StudentID
Но вы не можете изменить это позже, когда вам нужно три курса.
Честно говоря, вам действительно нужно вернуть список курсов в виде отдельных строк (и отсортировать его на вашем языке презентации) или вернуть его в виде списка значений, разделенных запятыми, в одном столбце и разобраться с этим на вашем языке презентации.
Вы можете сделать это в SQL Server следующим образом:
SELECT StudentID, Courses=
STUFF((SELECT ',' + CONVERT(VarChar(10), CourseID)
FROM myTable b
WHERE b.StudentID = a.StudentID
FOR XML PATH('')), 1, 1, '')
FROM myTable a
GROUP BY StudentID
Но я понятия не имею, будет ли это работать в Access.