次の理由で機能していません:最初の行のROWNUM
1
です この場合、MOD(ROWNUM,2)
1
です そしてあなたのWHERE
ステートメントはMOD(ROWNUM,2)=0
です 次に、これは1=0
に減少します 行は破棄されます。次に、後続の行がROWNUM
に対してテストされます。 of 1(前の行は出力に含まれず、行番号がないため)。これもテストに失敗し、破棄されます。繰り返して、悪意を持って、すべての行がWHERE
に失敗します テストして破棄されます。
WHERE MOD(ROWNUM,2)=1
を使用して、この方法で奇数行を取得しようとした場合 その後、最初の行のみが返され、2番目以降の行はテストに失敗し、クエリに含まれることはありません。
Vijaykumar Hadalgiが示唆しているように、サブクエリでROWNUMを選択し(where句を指定せずにすべての行に番号を付けて制限することができます)、外部クエリでテストを実行して行を制限する必要があります。
SELECT ename, job
FROM (
SELECT ename,
job,
ROWNUM AS row_id -- Generate ROWNUM second.
FROM (
SELECT ename, job
FROM Emp
ORDER BY ename -- ORDER BY first.
)
)
WHERE MOD( row_id, 2 ) = 0; -- Filter third.
SQLFIDDLE