2011-10-05 10 views
11

मैं किसी वेबपेज लिख रहा हूँ के रूप में यह उपयोगकर्ता द्वारा निर्दिष्ट किया जाता सहभागी फिल्टर मानदंडों के आधार पर परिणामों को फ़िल्टर करने। मैं केवल शीर्ष 20 पंक्तियों में एसक्यूएल से वापस लौटना चाहता हूं लेकिन मैं जानना चाहता हूं कि कितनी पंक्तियां मानदंडों (गणना) से मिले हैं। मैं उपयोगकर्ता को यह बताने में सक्षम होना चाहता हूं: "यहां आपके मानदंडों से मेल खाने वाली शीर्ष 20 पंक्तियां हैं, और बीटीडब्ल्यू, यहां 2,000 अतिरिक्त पंक्तियां थीं जिन्हें मैं यहां नहीं दिखा रहा हूं"।आप शीर्ष एक्स का चयन कैसे करते हैं लेकिन अभी भी पूरी क्वेरी का COUNT प्राप्त करते हैं?

मैं जानता हूँ कि मैं बस क्वेरी दो बार चला सकते हैं लेकिन Ewwww कि महंगा है और बेकार है। डेटाबेस को टैक्स करने के बिना मैं जो हासिल करना चाहता हूं उसे कैसे प्राप्त कर सकता हूं?

उत्तर

22

आप COUNT(*) OVER()

SELECT TOP 20 *, 
     COUNT(*) OVER() AS TotalMatchingRows 
FROM master..spt_values 
WHERE type='P' 
ORDER BY number 

उपयोग कर सकते हैं दो प्रश्नों कर तथापि खासकर यदि आप संकरा अनुक्रमित है कि मिलान पंक्ति संख्या निर्धारित करने में इस्तेमाल किया जा सकता बल्कि पूरे SELECT सूची को कवर नहीं है और अधिक कुशल बाहर काम कर सकते हैं।

+1

मैं एक बेवकूफ हूँ, आप एक ज़ेन गुरु हैं। :-) मुझे एसक्यूएल विशेषज्ञों, कोई फ्रिल्स, सिर्फ तथ्यों से प्यार है। धन्यवाद मार्टिन। – kingdango

+0

क्या आप स्पष्ट कर सकते हैं कि आप इसे दो प्रश्नों के साथ कैसे करेंगे? –

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