我希望对分组数据进行分页,但我的限制是每页只能显示有限数量的行(不是结果)。
例如,每行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以合并这些?
答案 0 :(得分: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个数据。