SQL Server 行编号和筛选结果

2023-12-01

我有一个应用程序,需要在列表中显示数据“页面”。基本思想是相当普遍的。显示屏显示项目列表,显示屏底部有某种控件,可让您转到下一个数据“页面”。

一切都很好。我有这个工作。

以下是我用来支持“下一个”行为的视图中的 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一组结果?


像这样的事情应该做...

SELECT * FROM (
SELECT  *, ROW_NUMBER() OVER (ORDER BY LastName, FirstName, DoB) AS __RN
FROM    CampaignParticipants
WHERE   LastName LIKE 'R%') innerData WHERE __RN BETWEEN 1 and 100

但是,您应该使用列名称,而不是“*”。我不知道你的桌子是什么样的,所以我无法为你填写。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 行编号和筛选结果 的相关文章

随机推荐