0

我希望对分组数据进行分页,但我的限制是每页只能显示有限数量的行(而不是结果)。

例如,每页 20 行将显示一组或多组结果。每组将包括:

  • 包含组标题的行
  • 组中每个结果的一行

如果组中的结果跨越多个页面,则“组标题”行将在后续页面上重复。

到目前为止,我能够以union这样一种方式对结果和组标题进行排序,使它们形成一个我可以轻松分页的行表。

select * from (

    select f.Id, f.Name, p.Id As ProviderId, 2 as RowType,
        'Result' as RowTypeTitle
    from Fund f
    inner join Provider p on f.ProviderId = p.Id

    union

    select distinct f2.ProviderId as Id, p2.Name, f2.ProviderId, 1 as RowType,
        'Group Title' as RowTypeTitle
    from Fund f2
    inner join Provider p2 on f2.ProviderId = p2.Id

) u

order by u.ProviderId, u.RowType asc

我在上面的 SQL 中缺少的是重复的“组标题”行,例如我需要每页只返回 20 个“行”。我如何能够重构 SQL 以合并这些?

4

1 回答 1

0

使用 ROW_NUMBER 函数,您将能够生成多个行。然后你记下你在哪里。

理想情况下,您可以使用“With”子句简化语法。但这里是您查询的代码。

前任:

 SELECT * FROM
    (select ROW_NUMBER () over(order by t.ProviderId, t.RowType )/20 AS PageID ,* 
     from (

         select * from (

            select f.Id, f.Name, p.Id As ProviderId, 2 as RowType,
                  'Result' as RowTypeTitle
            from Fund f
            inner join Provider p on f.ProviderId = p.Id

         union

            select distinct f2.ProviderId as Id, p2.Name, f2.ProviderId, 1 as RowType,
                 'Group Title' as RowTypeTitle
           from Fund f2
           inner join Provider p2 on f2.ProviderId = p2.Id )y)  t 
         )u


         order by u.ProviderId, u.RowType asc

然后“PageID”会告诉你在哪一页放置数据,一次 20 个。

于 2012-12-06T14:33:50.293 回答