2009-05-20 7 views
8

मैं निम्नलिखित बयान5 से अधिक परिणामों को लौटने वाले टॉप 5 का उपयोग कर एसक्यूएल एक्सेस करें?

SELECT TOP 5 rootcause, COUNT(IIF(accountability="Team 1",1,0)) 
FROM MOAQ 
WHERE CDT=1 
GROUP BY rootcause 

MOAQ उपयोग कर रहा हूँ अन्य क्वेरी कि 4 टेबल, कुछ खास नहीं से लगभग 20 क्षेत्रों रिटर्न है। यह अपेक्षित काम करता है और मुझे 5 परिणाम मिलते हैं।

यदि मैं सशर्त क्षेत्र पर ORDER BY खंड जोड़ता हूं, हालांकि मुझे 8 परिणाम मिलना शुरू हो जाता है। अगर मैं पहले क्षेत्र से सॉर्ट करता हूं तो कोई समस्या नहीं है।

कोई भी जानता है कि क्या हो रहा है?

को स्पष्ट करने के लिए संपादित करें - मैं केवल इस बिंदु पर एक्सेस 2003 के भीतर से परीक्षण कर रहा हूं, अंतिम विवरण एक्सेल फ्रंट एंड से एडीओ के माध्यम से पैरामीटरयुक्त क्वेरी होगी।

+0

क्या यह एक्सेस के भीतर है या आप किसी प्रोग्राम से एक्सेस तक पहुंच रहे हैं? यदि उत्तरार्द्ध, आप किस कनेक्शन स्ट्रिंग का उपयोग कर रहे हैं? इसके अलावा आप किस संस्करण का उपयोग कर रहे हैं? – AnonJr

उत्तर

28

इस Access में top निर्देश के जाने माने प्रभाव है, लेकिन यह बहुत अच्छी तरह से ज्ञात नहीं है ...

top निर्देश शीर्ष n आइटम वापस नहीं करता है, के रूप में भी आसानी से विश्वास करने के लिए नेतृत्व किया है। इसके बजाए यह परिणाम के आदेश द्वारा निर्धारित कम से कम n विशिष्ट आइटम लौटाता है।

ज्यादातर मामलों में यह वही है, लेकिन आपके उदाहरण में जहां 5 वीं से 8 वीं वस्तुओं में वही ऑर्डरिंग मान होता है, उनमें से सभी शामिल होते हैं। यह पहले पांच आइटम लौटाता है, लेकिन फिर भी उन सभी वस्तुओं को जो पांचवें आइटम के समान ऑर्डरिंग मान रखते हैं।

यदि आप तालिका में कोई ऑर्डरिंग लागू नहीं करते हैं, तो सभी फ़ील्ड पर विचार किया जाता है, इसलिए यदि आपके पास परिणाम में एक अनूठा क्षेत्र है तो क्वेरी हमेशा पांच आइटम लौटाएगी। वही है यदि ऑर्डरिंग में अद्वितीय फ़ील्ड शामिल है।

एसक्यूएल की अन्य बोलियां अलग-अलग व्यवहार कर सकती हैं। top टी-एसक्यूएल (एसक्यूएल सर्वर) में अकेले निर्देश उदाहरण के लिए n आइटम से अधिक कभी नहीं लौटाता है। हालांकि, top के साथ क्लॉज with ties और order by निर्दिष्ट करके, कोई भी एक्सेस में समान व्यवहार का निरीक्षण कर सकता है।

+2

+1 दिलचस्प! ज्ञात प्रभाव जो – Andomar

+0

ज्ञात नहीं हैं, बहुत रोचक, धन्यवाद – Lunatik

1

एक्सेस 2003 सहायता नाम About ANSI SQL query mode (MDB) में पृष्ठ पर जाएं, फिर 'एएनएसआई-9 2 एसक्यूएल का उपयोग क्यों करें?' का विस्तार करें। विषय और आप इस देखेंगे:

"सीमा का उपयोग पंक्तियों खंड एनएन एक क्वेरी द्वारा रिटर्न पंक्तियों की संख्या सीमित करने के लिए"

तो बस एएनएसआई-92 क्वेरी मोड में पहुँच यूआई डाल या का उपयोग OLE कोड में डीबी (उदाहरण के लिए एडीओ) और खंड

LIMIT TO 5 ROWS 

अपनी क्वेरी में जोड़ें।

...

केवल मजाक कर रहा है! यह केवल एक और उदाहरण है कि एक्सेस डेटाबेस इंजन को खराब तरीके से कैसे दस्तावेज किया गया है। मुझे लगता है कि एक्सेस डॉक्यूमेंटेशन टीम में किसी ने भी गैर-अनुचित धारणा नहीं की है कि एक्सेस डेटाबेस इंजन के तथाकथित एएनएसआई-9 2 क्वेरी मोड आईएसओ/एएनएसआई एसक्यूएल-9 2 मानक के अनुरूप होंगे। यह नहीं।

एक्सेस डेटाबेस इंजन का अपना स्वामित्व (यानी गैर-एसक्यूएल-9 2 मानक) वाक्यविन्यास शीर्ष एन है (SQL सर्वर के स्वामित्व वाले शीर्ष एन वाक्यविन्यास के साथ उलझन में नहीं होना चाहिए जो कि अर्थात् अलग है)। संक्षेप में, यह डुप्लीकेट को हल नहीं करता है।यदि मानदंड तालिका में प्रत्येक पंक्ति को संतुष्ट करता है तो आपको परिणाम में तालिका में प्रत्येक पंक्ति मिल जाएगी।

वर्कअराउंड परिणामस्वरूप केवल पहली एन पंक्तियों को पढ़ने के लिए कर्सर का उपयोग करना है। चूंकि एक्सेस डेटाबेस एसक्यूएल प्रक्रियात्मक कोड या स्पष्ट कर्सर का समर्थन नहीं करता है, इसलिए आपको इसे 'क्लाइंट' पक्ष पर करना होगा उदा। एक रिकॉर्ड्स ऑब्जेक्ट खोलें और पहले एन रिकॉर्ड को एक निर्मित एडीओ रिकॉर्डसेट में पढ़ें।

+1

अन्य कार्यवाही, जैसा उपर्युक्त दूसरे उत्तर में उल्लिखित है, प्राथमिक कुंजी फ़ील्ड जैसे "टाई ब्रेकर" फ़ील्ड का चयन करना है, और इसे 'ऑर्डर बाय' 'खंड –

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