我有一个 sql 视图,其中包含来自 3 个链接实体(标题 > 版本 > SKU)的数据。此视图中的数据用于搜索 3 个实体中的任何字段。例如,如果您指定条件 title.regionid = '14',则视图返回 4,000 个唯一行(每个 SKU 1 个),它们属于 765 个唯一版本,这些版本属于 456 个唯一标题。
我需要的是使用 Row_Number() 启用基于标题的分页。所以
SELECT * FROM myview WHERE title.regionid = '14' AND Row BETWEEN 0 AND 35
问题是我的 Row 列需要按 Title 计算行数,而不是按 SKU,所以从 4000 行的结果集中,如果第一个标题包含 12 个版本和 65 个 SKU,则所有 65 行的行号应该是 1,因为它们属于同一个标题。
我不能使用 GroupBy,因为我的视图包含 40 多个列,所有这些列都可以通过 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
在第一页有 35 行只属于 4 个标题,但是 Row 列按行计数,所以它停在那里,而如果它按标题计数,我会得到第 1 页的 387 行......我怎样才能完成分页这个情况?