グループ化されたデータをページ分割したいのですが、ページごとに限られた数の行(結果ではない)しか表示できないという制限があります。
たとえば、20行の各ページには、1つ以上の結果グループが表示されます。各グループは以下で構成されます。
- グループタイトルを含む行
- グループ内の各結果の行
結果が複数のページにまたがるグループになる場合、「グループタイトル」の行は後続のページで繰り返されます。
これまでのところ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に欠けているのは、重複する「グループタイトル」行です。たとえば、1ページあたり20行のみを返す必要があります。これらを組み込むためにSQLをリファクタリングするにはどうすればよいですか?