2010-07-10 13 views
8

मैं विंडोज सर्वर 2008 पर SQL सर्वर 2008 एंटरप्राइज़ का उपयोग कर रहा हूं। मैं शीर्ष 11 से शीर्ष 20 तक परिणाम का चयन करना चाहता हूं (उदा। मुझे केवल 11 वें परिणाम में 11 वीं में दिलचस्पी है)। इस सवाल को tsql में कुशलता से लिखने के लिए कोई विचार कैसे? पहले सेएसक्यूएल सर्वर ऑफसेट समकक्ष

धन्यवाद, जॉर्ज

+0

एसक्यूएल सर्वर ऑफसेट समकक्ष 2012 के बाद। [मेरा समाधान] देखें (http://stackoverflow.com/a/9261797/1045444)। –

उत्तर

17

दुर्भाग्य से एसक्यूएल सर्वर MySQL के OFFSET के लिए इसी तरह कुछ भी प्रदान नहीं करता है वाक्य - विन्यास। हालांकि, अगर आप इस प्रकार एक व्युत्पन्न तालिका का उपयोग कर की कोशिश करना चाहते हो सकता है:

SELECT some_field 
FROM (
      SELECT some_field, ROW_NUMBER() OVER (ORDER BY some_id) AS rownum 
      FROM table 
     ) AS t 
WHERE t.rownum BETWEEN 11 AND 20 
+0

क्या मुझे कुछ_आईडी द्वारा ऑर्डर करना चाहिए? – George2

+2

@ जॉर्ज 2: चूंकि संबंधपरक डेटाबेस में तालिकाओं को अनियंत्रित रिकॉर्ड के सेट हैं, इसलिए आपको अंकन को समझने के क्रम में एक (या अधिक) अद्वितीय स्तंभ (ओं) द्वारा परिणाम सेट को ऑर्डर करना होगा। अन्यथा, आप कैसे कह सकते हैं कि रिकॉर्ड 11 वां है? –

+0

कूल, सवाल का जवाब! – George2

2

एक तरह से क्षेत्र पीके मान लिया जाये,

select top 10 * from MyTable 
where PK not in (select top 10 PK from Mytable order by PK) 
order by PK 

संपादित करें: यहाँ एक संस्करण

select top 10 * from 
(select top 20 * from MyTable order by PK) as MySelection 
order by PK desc 
+0

मुझे लगता है कि जब यह 21 वीं से 30 वीं चुनने की ज़रूरत है, तो मुझे बहुत मुश्किल लगता है, मुझे एक और tsql कथन लिखने की आवश्यकता है। – George2

+1

क्वेरी को पैरामीट्रीज़ करना बहुत आसान है। – SeaDrive

+0

यह एक अच्छा समाधान की तरह दिखता है। क्या यह मापनीय है? अर्थात। यदि 'मायटेबल' में 500,000 पंक्तियां हैं और आप कभी-कभी 400,000 से 400,010 पंक्तियां चाहते हैं तो क्या कोई प्रदर्शन समस्या होगी? – hofnarwillie

5

देखें निम्नलिखित समाधान केवल एसक्यूएल सर्वर 2012 से लागू है। एसक्यूएल सर्वर में ऑफसेट के साथ

सीमा:

SELECT email FROM myTable 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY; 

// ऑफसेट - कोई। छोड़ी गई पंक्तियों

// अगली - आवश्यक संख्या। अगली पंक्तियों का

+0

प्रश्न 2008 है और यह एक 2012 फीचर – Paparazzi

+0

@ बलाम है: मैंने जवाब दिया है क्योंकि यह उन लोगों के लिए सहायक हो सकता है जो अब एसक्यूएल सर्वर के अपग्रेड किए गए संस्करण का उपयोग कर रहे हैं। क्या आप चाहते हैं कि मुझे जवाब हटाना पड़े, अगर आपको लगता है कि यह लोगों के लिए गुमराह कर रहा है। मैंने अभी जवाब अपडेट किया है। –

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