Не работи, защото:за първия ред ROWNUM е 1 и в този случай MOD(ROWNUM,2) е 1 и тъй като вашият WHERE изразът е MOD(ROWNUM,2)=0 след това това намалява до 1=0 и редът се отхвърля. След това следващият ред ще бъде тестван срещу ROWNUM от 1 (тъй като предишният ред вече не е в изхода и няма да има номер на ред), което отново ще се провали на теста и ще бъде отхвърлено. Повторете, гадене на рекламата и всички редове не отговарят на WHERE тестват и се изхвърлят.
Ако се опитате да получите нечетните редове по този начин, като използвате WHERE MOD(ROWNUM,2)=1 след това ще върне само първия ред, а вторият и следващите редове ще се провалят при теста и никога няма да бъдат включени в заявката.
Както Виджайкумар Хадалги предлага, трябва да изберете 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