我有一个应用程序,需要在列表中显示数据“页面”。基本思想是相当普遍的。显示屏显示项目列表,显示屏底部有某种控件,可让您转到下一个数据“页面”。
一切都很好。我有这个工作。
以下是我用来支持“下一个”行为的视图中的 SQL。
CREATE VIEW CampaignParticipants AS
SELECT row_number() OVER (ORDER BY TPT.LastName, TPT.FirstName, TPT.DoB) AS RowNumber
,CGP.*
,TPT.*
FROM tblCampaignGEDPush CGP
JOIN tblParticipants TPT
ON CGP.PartID = TPT.PartID
这是我使用 VIEW 的方式
SELECT *
FROM CampaignParticipants
WHERE RowNumber >= 0
AND RowNumber <= 100
这模拟从 VIEW 中抓取 100 个结果的“第一页”。翻阅每组结果都非常顺利。
太棒了..但是:
正如你们中一些处理过这个问题的人可能已经意识到的那样,这是有缺陷的。如果我想搜索TPT.LastName like 'R%'
并得到第一组结果,我就注定了。
我要开始看看RowNumber = 0
,停在RowNumber = 100
,但“R”结果可能会远远超出该范围。结果:列表返回为空。
而且它变得更加粘性:用户希望能够“过滤”姓氏、名字、出生日期、位置、电话、邮政编码等任何内容。
**编辑:我不能真正将过滤器放在“内部”查询上,因为它位于视图中,并且过滤器可以任意更改
任何人有任何想法如何获得这个结果集有一个row_number()
on the filtered一组结果?