sql为两个连接表中第二个表的前5个记录

1 t-sql sql-server greatest-n-per-group

我有2张桌子.studentstudent_records.

学生表有S_id并且在student_records中有外键.

加入这些表时,我需要1个学生ID和来自student_records表的前5个记录,用于该学生ID.

__PRE__
1来自学生表,'abc','dedw'等等来自学生表中student_records 还有一个活动字段.如果Active = 1,则显示来自student_records的前5条记录,如果Active = 0,则只有1行的studentid

Joe*_*lli 5

假设至少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
Run Code Online (Sandbox Code Playgroud)

这也可以使用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
Run Code Online (Sandbox Code Playgroud)