在SQL中分页过滤的数据

时间:2014-11-14 19:22:31

标签: sql-server-2008

我对SQL并不十分熟悉。因此,我有一个SQL脚本来过滤表格中的数据:

SELECT X, Y, Z FROM dbo.a 
WHERE Y LIKE '%Test%' AND Z >= 5 AND Z <= 10

现在我正在尝试为此添加分页。我正在使用MS SQL Server 2008.我用于分页的脚本是:

SELECT X, Y, Z
FROM (
SELECT X, Y, Z, ROW_NUMBER() OVER (ORDER BY X) AS RowNum
FROM dbo.a ) AS A
WHERE A.RowNum BETWEEN 1 AND 10

我如何将这些组合起来,以便从我的过滤表中抓取特定的数据页?

1 个答案:

答案 0 :(得分:0)

您的子查询应该是带有谓词的子查询。

数据分页是偏移量和页面大小的组合。偏移量是所需的页面索引乘以页面大小。因此,如果您的页面是20个结果而您想要第5页,那么rownumber范围是从(5-1) * 205 * 20(我们从页码中减去1,因为我们想要一个从0开始的索引)。 / p>

在您的情况下,查询将是:

SELECT
    X, Y, Z
FROM (
    SELECT
        X, Y, Z,
        ROW_NUMBER() OVER (ORDER BY X) AS RowNum
    FROM
        dbo.a 
    WHERE
        Y LIKE '%Test%'
        AND
        Z >= 5
        AND
        Z <= 10
 ) AS A
 WHERE
     A.RowNum BETWEEN @pageIndex * @pageSize AND (@pageIndex + 1) * @pageSize

...其中@pageIndex是从0开始的页码(因此从基数页码中减去1)。