2010-02-19 18 views
9

का उपयोग किए बिना अलग पंक्तियों की संख्या कहें कि मेरे पास टेबल 1 है जिसमें डुप्लिकेट पंक्तियां हैं (इस तथ्य को भूलें कि इसमें कोई प्राथमिक कुंजी नहीं है ...) क्या जॉइन, सबक्वायरी या सीटीई के बिना और बिना किसी भी को दोबारा लिखना संभव है ग्रुप बाय की तरह कुछ कॉलम को स्पेल करना है?सबक्वायरी

SELECT COUNT(*) 
FROM (
    SELECT DISTINCT * FROM Table1 
) T1 
+0

क्यों नहीं करते आप एक चाहते हैं सबक्वेरी? – erikkallen

+0

@erikkallen: वास्तव में एक विचार, वास्तव में। मुझे अपने विकल्पों को जानना पसंद है :) – squillman

उत्तर

8

नहीं, यह संभव नहीं है।

यदि आप अपने ढांचे/क्वेरी उपकरण/जो कुछ भी सीमित हैं, तो सबक्वायरी का उपयोग नहीं कर सकते हैं, और ग्रुप बी में प्रत्येक कॉलम नाम का जादू नहीं कर सकते हैं, तो आप एसओएल हैं।

यदि आप अपने ढांचे/क्वेरी उपकरण/जो कुछ भी सीमित नहीं हैं, तो उपकुंजी का उपयोग करने के लिए कोई कारण नहीं है। -

3

यदि आप वास्तव में वास्तव में है कि आप बस "सभी के द्वारा COUNT (*) table1 ग्रुप से चयन करें, कॉलम, यहाँ" कर सकते हैं और परिणाम आपके गिनती के रूप में सेट का आकार ले करना चाहते हैं।

लेकिन यह योग्य कोड dailywtf किया जाएगा;)

+0

हाँ, इस प्रकार "मैं अपने प्रश्न में" ग्रुप बाय "का उपयोग नहीं करना चाहता हूं;) – squillman

8

आप कुछ इस तरह कर सकते हैं।

SELECT Count(DISTINCT ProductName) FROM Products 

लेकिन यदि आप पूरी तरह से अलग रिकॉर्ड की गिनती चाहते हैं तो आपको अपने द्वारा उल्लिखित अन्य विकल्पों में से एक का उपयोग करना होगा।

यदि आप प्रश्न में सुझाए गए कुछ ऐसा करना चाहते हैं, तो इसका मतलब यह होगा कि आपके पास आपकी तालिका में डुप्लिकेट रिकॉर्ड हैं।

यदि आपके पास डुप्लिकेट रिकॉर्ड नहीं हैं SELECT DISTINCT * from table विशिष्ट के बिना समान होगा।

+0

उस उदाहरण के लिए धन्यवाद - जब मैं खोज रहा था तो यह मेरी सही समस्या थी। –

+0

यह स्वीकार्य उत्तर होना चाहिए –

1

मैं सिर्फ कह रही है कि आप यह देखना होगा कि स्तंभों की डेटाप्रकार तुलनीय है जरूरत से जवाब परिशोधित करना चाहते अन्यथा आप उन्हें DISTINCT बनाने की कोशिश कर एक त्रुटि प्राप्त होगी:

उदा com.microsoft.sqlserver.jdbc.SQLServerException: ntext डेटा प्रकार DISTINCT के रूप में नहीं चुना जा सकता है क्योंकि यह तुलनीय नहीं है।

यह आपके आरडीबीएमएस - आरटीएम के आधार पर बड़े बाइनरी, एक्सएमएल कॉलम और अन्य के लिए सच है। उदाहरण के लिए SQLServer का समाधान इसे SQL सर्वर 2005 से ntext से nvarchar (MAX) में डालना है।

आप पी कॉलम पर कायम हैं तो आप (अपने आप को मैं इस सत्यापित नहीं किया है, लेकिन मैं तार्किक सोचा था कि पी कॉलम तुलनीय होना जरूरी होता है) ठीक होना चाहिए

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