如何不在行上而是在行组上使用 OFFSET/FETCH?

Axi*_*xus 5 sql-server grouping fetch offset

如果我有一个如下的一对多表:

FamilyId          UserId
1                 1
1                 2
2                 3
2                 4
3                 5
Run Code Online (Sandbox Code Playgroud)

我可以offset/fetch用来获取一组行。但是我怎样才能用它来获得一组家庭呢?我怎样才能fetch例如,前两个家庭使用(在这种情况下,共4行返回)offset/fetch

Pரத*_*ீப் 1

正如评论中提到的,您需要创建row number不同的familyid然后用于offset/fetch过滤组。

然后join将过滤后的组返回主表以获取userid's过滤后的组中的

SELECT a.familyid,
       userid
FROM   yourtable a
       JOIN (SELECT Row_number()OVER(ORDER BY familyid)rn,
                    familyid
             FROM   (SELECT DISTINCT FamilyId
                     FROM   yourtable)b
             ORDER BY rn  OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY
            ) c
         ON a.FamilyId = c.FamilyId 
Run Code Online (Sandbox Code Playgroud)

注意:这将从sql server 2012+