2013-09-30 9 views
5

के बीच पंक्ति संख्या है, मैं row_number over का उपयोग करके मेरी तालिका से एक निश्चित पंक्तियों का चयन करने का प्रयास कर रहा हूं। हालांकि, एसक्यूएल त्रुटि संदेश "अमान्य कॉलम नाम 'ROWNUMBERS' संकेत देगा। कोई मुझे सही कर सकता है?Row_Number जहां

SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, * 
FROM Product 
WHERE ROWNUMBERS BETWEEN @fromCount AND @toCount 
+2

यह निश्चित रूप से MySQL नहीं है। कार्रवाई में –

उत्तर

19

WHERE खंड में aliased स्तंभ को संदर्भित करने के लिए तार्किक जगह क्वेरी प्रोसेसिंग लेने की वजह से काम नहीं करता है प्रयास कर रहा है। WHERE का मूल्यांकन SELECT खंड से पहले किया गया है। इसलिए, WHERE का मूल्यांकन किया जाता है, तो कॉलम ROWNUMBERS मौजूद नहीं है।

इस उदाहरण में स्तंभ को संदर्भित करने के लिए सही तरीका होगा:

SELECT a.* 
FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, * 
    FROM Product) a 
WHERE a.ROWNUMBERS BETWEEN @fromCount AND @toCount 

आपके संदर्भ के लिए, संचालन के लिए आदेश है:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
+0

@ 0070 [यहां एक डेमो है] (http://sqlfiddle.com/#!3/a1538/2)। – Kermit

+2

हाँ, 1000 वां उत्तर! : डी +1 – Doorknob

2

एक और जवाब है कि यहाँ विशिष्ट त्रुटि सूचना को हल करती है नहीं है। हालांकि, मैं भी व्यापक समस्या का समाधान करना चाहता हूं। ऐसा लगता है कि आप यहां क्या कर रहे हैं पेजिंग प्रदर्शन के लिए आपके परिणाम हैं। यदि ऐसा है, और यदि आप एसक्यूएल सर्वर 2012 का उपयोग कर सकते हैं, तो अब एक बेहतर तरीका है। OFFSET/FETCH पर एक नज़र डालें:

SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY First Name 
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY; 

कि एक प्रश्न के तीसरे पेज प्रदर्शित होगा जहां पृष्ठ आकार 5.

संबंधित मुद्दे