3 つのリンクされたエンティティ (タイトル > エディション > SKU) からのデータを含む SQL ビューがあります。このビューのデータは、3 つのエンティティ内の任意のフィールドを検索するために使用されます。たとえば、条件 title.regionid = '14' を指定すると、ビューは 4,000 の一意の行 (SKU ごとに 1 行) を返します。これらは、456 の一意のタイトルに属する 765 の一意のエディションに属します。
必要なのは、Row_Number() を使用してタイトルに基づいてページングを有効にすることです。そう
SELECT * FROM myview WHERE title.regionid = '14' AND Row BETWEEN 0 AND 35
問題は、行列が SKU ではなくタイトルで行をカウントする必要があることです。そのため、4,000 行の結果セットから、最初のタイトルに 12 のエディションと 65 の SKU が含まれている場合、65 行すべての行番号は 1 になるはずです。それらは同じタイトルに属しているためです。
ビューに 40 以上の列が含まれているため、GroupBy を使用できません。すべての列を WHERE 句で検索できます。
クエリは次のとおりです。
SELECT *
FROM (
SELECT row_number() OVER (ORDER BY a.TitleSort ASC) AS Row, a.*
FROM (SELECT * FROM v_AdvancedSearch
WHERE
istitledeleted = 0
--AND ISBN = '1-4157-5842-5'
--AND etc
) AS a
) d
WHERE
Row BETWEEN 0 AND 35
最初のページには 4 つのタイトルにのみ属する 35 行がありますが、行列は行ごとにカウントされるため、そこで停止しますが、タイトルでカウントすると、ページ 1 で 387 行になります...どうすればページングを達成できますかこの状況?