web-dev-qa-db-ja.com

SQL Serverクエリで行をスキップする方法

Row_Number()列(Num)が追加されたproductテーブルからクエリを選択すると、以下のような答えが得られます(取得できる行は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)

結果

enter image description here

私の要件は、3行ごとにスキップし、7行の制限行のみを取得する方法です。

期待される結果

以下のような結果が必要です:

enter image description here

2
M.I.M.F

この目的のために Modulo 演算子を使用できます。

Modulo
ある数値を別の数値で割った余りを返します。

この場合:

WHERE (Num - 1) % 4 = 0

サンプルをセットアップして、一連の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
影響を受ける1024行
select top 25 * 
from integers
where (val - 1) % 4 = 0
GO
 | val | 
 | : | 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 ---(ここ

5
McNets

別の条件を追加

AND Num % 4 = 1

または、単にすべての値をリストします。

WHERE Num IN (1,5,9,13,17,21,25)
2
dnoeth