如何跳过 SQL Server 查询中的行?

M.I*_*M.F 2 sql-server sql-server-2012 sql-server-2014

我从我的product表中选择了一个额外的 Row_Number() 列 (Num) 的查询,我得到了如下的答案(我只限制了 20 行来检索)。

询问

SELECT * 
FROM (SELECT ROW_NUMBER() OVER(ORDER BY ProductCode) AS Num, 
             ProductName
      FROM   BASE_Product 
      WHERE IsActive = 1) BASE_Product 
WHERE Num > 0 
AND   Num < (21)
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明

我的要求是如何跳过每 3 行并仅检索 7 个限制行。

预期结果

我需要如下结果:

在此处输入图片说明

McN*_*ets 5

为此,您可以使用运算符。

Modulo
返回一个数除以另一个的余数。

在这种情况下:

WHERE (Num - 1) % 4 = 0
Run Code Online (Sandbox Code Playgroud)

我已经设置了一个示例,生成了一系列 1K 整数。

--------------------------------------------------------------------------------
-- ? Integers table
--------------------------------------------------------------------------------
with
  p0(i) as (select 1 union all select 1 union all select 1 union all select 1)
, p1(i) as (select 1 from p0 as a, p0 as b, p0 as c, p0 as d, p0 as e)--1K rows
select row_number() over(order by i) as val
into integers
from p1;
GO
Run Code Online (Sandbox Code Playgroud)
1024 行受影响
select top 25 * 
from integers
where (val - 1) % 4 = 0
GO
Run Code Online (Sandbox Code Playgroud)
| 价值 |
| :-- |
| 1 |
| 5 |
| 9 |
| 13 |
| 17 |
| 21 |
| 25 |
| 29 |
| 33 |
| 37 |
| 41 |
| 45 |
| 49 |
| 53 |
| 57 |
| 61 |
| 65 |
| 69 |
| 73 |
| 77 |
| 81 |
| 85 |
| 89 |
| 93 |
| 97 |

dbfiddle在这里