Предполагается, по крайней мере, SQL Server 2005:
SELECT S_id, SomeColumn
FROM (SELECT s.S_id, sr.SomeColumn,
ROW_NUMBER() OVER (PARTITION BY s.S_id ORDER BY sr.SomeColumn) AS RowNum
FROM student s
LEFT JOIN student_records sr
ON s.S_id = sr.S_id
AND s.Active = 1
) t
WHERE t.RowNum <= 5
Это также может быть записано с использованием CTE .
with cteRowNum as (
SELECT s.S_id, sr.SomeColumn,
ROW_NUMBER() OVER (PARTITION BY s.S_id ORDER BY sr.SomeColumn) AS RowNum
FROM student s
LEFT JOIN student_records sr
ON s.S_id = sr.S_id
AND s.Active = 1
)
SELECT S_id, SomeColumn
FROM cteRowNum
WHERE RowNum <= 5