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 个限制行。
我需要如下结果:
为此,您可以使用模运算符。
Modulo
返回一个数除以另一个数的余数。
在这种情况下:
WHERE (Num - 1) % 4 = 0
Run Code Online (Sandbox Code Playgroud)
我已经设置了一个示例,生成了一系列 1K 整数。
Run Code Online (Sandbox Code Playgroud)-------------------------------------------------------------------------------- -- ? 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
1024 行受影响
Run Code Online (Sandbox Code Playgroud)select top 25 * from integers where (val - 1) % 4 = 0 GO
| 价值 | | :-- | | 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在这里