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)
私の要件は、3行ごとにスキップし、7行の制限行のみを取得する方法です。
以下のような結果が必要です:
この目的のために 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 ---(ここ
別の条件を追加
AND Num % 4 = 1
または、単にすべての値をリストします。
WHERE Num IN (1,5,9,13,17,21,25)