2013-08-03 4 views
50

आदेश BY खंड दृश्य, इनलाइन कार्यों में अमान्य है, टेबल, सबक्वेरी, और आम मेज भाव ली गई है, जब तक टॉप, ऑफ़सेट या एक्सएमएल के लिए भी निर्दिष्ट है।आदेश BY खंड दृश्य, इनलाइन काम करता है, व्युत्पन्न टेबल, सबक्वेरी में अमान्य है, और आम मेज भाव

मुझे निम्न क्वेरी निष्पादित करने का प्रयास करते समय उपर्युक्त त्रुटि मिल रही है। क्या कोई भी एक नज़र देख सकता है और मुझे बता सकता है कि मैं यहाँ क्या गलत कर रहा हूं?

SELECT 
    * 
FROM (
    SELECT 
     Stockmain.VRNOA, 
     item.description as item_description, 
     party.name as party_name, 
     stockmain.vrdate, 
     stockdetail.qty, 
     stockdetail.rate, 
     stockdetail.amount, 
     ROW_NUMBER() OVER (ORDER BY VRDATE) AS RowNum 
    FROM StockMain 
    INNER JOIN StockDetail 
     ON StockMain.stid = StockDetail.stid 
    INNER JOIN party 
     ON party.party_id = stockmain.party_id 
    INNER JOIN item 
     ON item.item_id = stockdetail.item_id 
    WHERE stockmain.etype='purchase' 
    ORDER BY VRDATE DESC 
) AS MyDerivedTable 
WHERE 
    MyDerivedTable.RowNum BETWEEN 1 and 5 
+0

आदेश सबक्वेरी त्रुटि के रूप में चयन के बाहर होना चाहिए द्वारा कहा – Daniele

उत्तर

60

आप क्योंकि आप पहले से ROW_NUMBER() OVER (ORDER BY VRDATE DESC) इसका उपयोग किया है WHERE खंड के बाद आंतरिक क्वेरी में ORDER BY उपयोग करने की आवश्यकता नहीं है।

SELECT 
    * 
FROM (
    SELECT 
     Stockmain.VRNOA, 
     item.description as item_description, 
     party.name as party_name, 
     stockmain.vrdate, 
     stockdetail.qty, 
     stockdetail.rate, 
     stockdetail.amount, 
     ROW_NUMBER() OVER (ORDER BY VRDATE DESC) AS RowNum --< ORDER BY 
    FROM StockMain 
    INNER JOIN StockDetail 
     ON StockMain.stid = StockDetail.stid 
    INNER JOIN party 
     ON party.party_id = stockmain.party_id 
    INNER JOIN item 
     ON item.item_id = stockdetail.item_id 
    WHERE stockmain.etype='purchase' 
) AS MyDerivedTable 
WHERE 
    MyDerivedTable.RowNum BETWEEN 1 and 5 
+15

नहीं, आप * * आदेश द्वारा त्रुटि संदेश में दिए गए कारण के लिए ली गई तालिका में पंक्तियों को सॉर्ट करने का उपयोग नहीं कर सकते हैं। परिणाम सेट में पंक्तियों का क्रम अंततः बाहरी चयन में किसी ऑर्डर द्वारा क्लॉज द्वारा नियंत्रित किया जाता है, न कि खंड से। [ओवर क्लॉज] (http://technet.microsoft.com/en-us/library/ms189461.aspx) "* लॉजिकल * ऑर्डर निर्दिष्ट करता है जिसमें विंडो फ़ंक्शनकुल्यूलेशन किया जाता है"। यह परिणाम सेट को सॉर्ट नहीं करता है। –

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