Det virker ikke fordi:for den første række ROWNUM
er 1
og i dette tilfælde MOD(ROWNUM,2)
er 1
og siden din WHERE
sætningen er MOD(ROWNUM,2)=0
så reduceres dette til 1=0
og rækken kasseres. Den efterfølgende række vil derefter blive testet mod en ROWNUM
af 1 (da den forrige række ikke længere er i outputtet og ikke vil have et rækkenummer), hvilket igen vil fejle testen og blive kasseret. Gentag, ad nauseum og alle rækker mislykkes WHERE
test og kasseres.
Hvis du prøver at få de ulige rækker på denne måde ved hjælp af WHERE MOD(ROWNUM,2)=1
derefter returnerer den kun den første række, og den anden, og efterfølgende, rækker vil mislykkes i testen og vil aldrig blive inkluderet i forespørgslen.
Som Vijaykumar Hadalgi foreslår, skal du vælge ROWNUM i en underforespørgsel (hvor den kan nummerere alle rækkerne uden en where-sætning for at begrænse det) og derefter i den ydre forespørgsel udføre testen for at begrænse rækkerne:
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