यह काम नहीं कर रहा है क्योंकि:पहली पंक्ति के लिए ROWNUM
है 1
और, इस मामले में, MOD(ROWNUM,2)
है 1
और चूंकि आपका WHERE
कथन है MOD(ROWNUM,2)=0
फिर यह घटकर 1=0
. हो जाता है और पंक्ति को त्याग दिया जाता है। उसके बाद अगली पंक्ति का परीक्षण ROWNUM
. के विरुद्ध किया जाएगा 1 का (चूंकि पिछली पंक्ति अब आउटपुट में नहीं है और इसमें कोई पंक्ति संख्या नहीं होगी), जो फिर से परीक्षण में विफल हो जाएगा और त्याग दिया जाएगा। दोहराएँ, विज्ञापन रुकना और सभी पंक्तियाँ विफल हो जाती हैं WHERE
परीक्षण करते हैं और त्याग दिए जाते हैं।
यदि आप WHERE MOD(ROWNUM,2)=1
का उपयोग करके इस तरह से विषम पंक्तियों को प्राप्त करने का प्रयास करते हैं तो यह केवल पहली पंक्ति और दूसरी लौटाएगा, और बाद में, पंक्तियां परीक्षण में विफल हो जाएंगी और कभी भी क्वेरी में शामिल नहीं की जाएंगी।
जैसा कि विजयकुमार हडाल्गी सुझाव देते हैं, आपको उप-क्वेरी में ROWNUM का चयन करना होगा (जहां यह सभी पंक्तियों को बिना किसी खंड के प्रतिबंधित कर सकता है) और फिर बाहरी क्वेरी में पंक्तियों को प्रतिबंधित करने के लिए परीक्षण करें:
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