2013-06-19 6 views
17

अक्सर में TSQL में उपयोग निम्न क्वेरी में सभी स्तंभों, और एक गिनती (*) का चयन करने के: जब मैं Oracle SQL डेवलपर में इस क्वेरी निष्पादित करने के लिए यह नहीं है की कोशिशकैसे एक ही क्वेरी

SELECT COUNT(*), * 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 

काम करें और मुझे एक त्रुटि फेंकता है:

"Missing expression"

अच्छा वाक्यविन्यास क्या है?

अग्रिम धन्यवाद।

+0

आप .. द्वारा समूह का उपयोग या दो प्रश्नों का परिणाम गठबंधन करने के लिए होगा। –

+1

Plz आपकी तालिका की स्कीमा प्रदान करता है .. –

+0

मुझे विश्वास नहीं है कि कथन SQL सर्वर –

उत्तर

4

एक दृष्टिकोण निम्नलिखित की तरह कुछ करना है। इसके परिणामस्वरूप प्रत्येक पंक्ति के लिए एक गिनती (*) परिणाम होगा। लेकिन सावधान रहें, एक कार्टेशियनजॉइन है; यदि आपके पास 'foo%' जैसी कई पंक्तियां हैं तो यह बुरी तरह से प्रदर्शन करेगी।

select a.cntr, c.* 
from CUSTOMER c 
    , (select count(*) cntr 
    from customer b 
    where b.name like 'foo%') a 
where c.name like 'foo%' 
34

यह बेहतर प्रदर्शन करेंगे:

SELECT COUNT(*) OVER(), c.* 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 
+7

स्पष्टीकरण अच्छा रहा होगा – Blauhirn

+2

@ ब्लौहिम, यह एक खाली विंडो खंड के साथ एक विश्लेषणात्मक कार्य है - इसलिए यह पूरे परिणाम सेट पर पंक्तियों की गिनती की गणना करता है। यह आम तौर पर बेहतर प्रदर्शन करेगा क्योंकि इसे पंक्तियों की गिनती के रूप में केवल एक बार तालिका के प्रत्येक ब्लॉक पर जाना चाहिए। –

+0

@ जेफरी यह अच्छा है, लेकिन प्रत्येक पंक्ति के लिए अतिरिक्त कॉलम एक चुनिंदा गिनती (*) की तुलना में अधिक ओवरहेड का कारण बनता है, खासकर यदि आपके पास प्रत्येक कॉलम के लिए कुल मिलाकर है। क्या यह केवल पहली पंक्ति के समान ही होना संभव है और प्रत्येक पंक्ति के लिए फिर से दोहराया नहीं जाता है? – user3758745

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