2011-09-17 11 views
19

मुझे पंक्तियों को वापस करने के लिए तालिका को क्वेरी करने की आवश्यकता है, लेकिन मैं तालिका को सही तरीके से क्वेरी करने में सक्षम नहीं हूं। यहाँ मेरी तालिका दृश्य है:केवल एक कॉलम के विशिष्ट मानों के आधार पर पंक्तियों का चयन कैसे करें

Id    MailId   EmailAddress   Name 
1     1    [email protected]    Mr. A 
2     1    [email protected]    Mr. B 
3     1    [email protected]    Mr. C 
4     1    [email protected]    Mr. D 
5     1    [email protected]    Mr. A 


6     2    [email protected]    Mr. E 
7     2    [email protected]    Mr. A 
8     3    [email protected]    Mr. F 
9     4    [email protected]    Mr. D 

10    5    [email protected]    Mr. F 
11    6    [email protected]    Mr. D 

परिणाम सेट लौटना चाहिए:

Id    MailId   EmailAddress   Name 
1     1    [email protected]    Mr. A 
2     1    [email protected]    Mr. B 
3     1    [email protected]    Mr. C 
4     1    [email protected]    Mr. D 

6     2    [email protected]    Mr. E 
8     3    [email protected]    Mr. F 

दूसरे शब्दों में: पहले, मैं अलग ई-मेल पते का चयन करना चाहते हैं, और फिर अलग ई युक्त पंक्तियों को वापस मेल पते

नोट: बस "विशिष्ट" कीवर्ड का उपयोग करना यहां काम नहीं करेगा, क्योंकि यह अलग पंक्तियों का चयन करेगा। मेरी आवश्यकता है कि अलग-अलग ईमेल पते का चयन करें, और फिर उन पते वाले पंक्तियों का चयन करें।

संपादित करें: मैं या तो "समूह के आधार पर" का उपयोग नहीं कर सकते हैं कीवर्ड, क्योंकि इस के लिए मैं भी आईडी के साथ समूह के आधार पर (जो पी है) करना होगा और ऐसा करने में एक ही EmailAddress मूल्यों के साथ दो पंक्तियों वापस आ जाएगी लेकिन विभिन्न आईडी के साथ।

+1

आप केवल ग्रुप बाय ईमेल एड्रेस का उपयोग क्यों नहीं करते हैं ... यदि आप अपने पीके द्वारा समूहित करते हैं, तो यह कुछ भी नहीं करेगा क्योंकि प्राथमिक कुंजी हमेशा अनूठी होती है, इसलिए कथन द्वारा समूह कुछ भी नहीं करेगा .. अगर आप ईमेल द्वारा समूह का उपयोग करते हैं तो आपको पता लगाएं जैसा कि आपने निर्दिष्ट किया है वही परिणाम प्राप्त करें ... – blejzz

+1

ऐसा लगता है कि आप उन दोनों के लिए अलग ईमेल एड्रेस और नाम और पहला मिलान आईडी, MailId चुनना चाहते हैं। क्या वो सही है? मैं भी उत्सुक हूं कि आईडी और मेलआईड का उपयोग कैसे किया जाएगा। –

+1

प्राथमिक कुंजी द्वारा ग्रुपिंग का कोई मतलब नहीं है। ग्रुपिंग डुप्लिकेट मान हटा देता है। परिभाषा के अनुसार प्राथमिक कुंजी डुप्लिकेट नहीं हो सकती है। – Thilo

उत्तर

1

अगर आप न द्वारा

SELECT * FROM myTABLE GROUP BY EmailAddress 
+0

कृपया मेरा संपादित प्रश्न देखें। धन्यवाद – user576510

+1

मेरी टिप्पणी देखें, मेरा जवाब आपके इच्छित परिणाम देता है। – blejzz

+13

यह रिटर्न त्रुटि संदेश 8120, स्तर 16, राज्य 1, पंक्ति 1 स्तंभ 'EmailContact.RowId' का चयन करें सूची में अमान्य है क्योंकि यह या तो एक समग्र समारोह या GROUP BY क्लॉज़ में निहित नहीं है। – user576510

41

DISTINCT उपयोग ग्रुप का उपयोग करना चाहते हैं हो सकता है निम्न क्वेरी काम कर सकते हैं अपने उत्पादन को देखते हुए, इसे आजमाइए:

SELECT * FROM tablename 
WHERE id IN 
(SELECT MIN(id) FROM tablename GROUP BY EmailAddress) 

इस के लिए केवल एक पंक्ति का चयन करेंगे प्रत्येक विशिष्ट ईमेल पता, न्यूनतम id के साथ पंक्ति जो आपका परिणाम

+0

धन्यवाद! मुझे यकीन नहीं है कि इसे सही उत्तर –

+0

के रूप में क्यों चिह्नित नहीं किया गया है, मुझे लगता है कि आपको केवल नाम जोड़ने के लिए नाम फ़ील्ड शामिल करने की आवश्यकता है, हालांकि उसके पास इसका कोई उदाहरण नहीं है। – Beth

13

इसे आज़माएं - आपको एक सीटीई (सामान्य तालिका अभिव्यक्ति) की आवश्यकता है जो विभाजन आयन (समूह) अलग-अलग ई-मेल पते से आपका डेटा, और आईडी द्वारा प्रत्येक समूह को टाइप करता है - सबसे पहले सबसे पहले। तो फिर तुम सिर्फ प्रत्येक समूह के लिए पहली प्रविष्टि का चयन करें - कि तुम देना चाहिए आप जो खोज रहे हैं:

;WITH DistinctMails AS 
(
    SELECT ID, MailID, EMailAddress, NAME, 
     ROW_NUMBER() OVER(PARTITION BY EMailAddress ORDER BY ID) AS 'RowNum' 
    FROM dbo.YourMailTable 
) 
SELECT * 
FROM DistinctMails 
WHERE RowNum = 1 

यह एसक्यूएल सर्वर पर काम करता है 2005 और नए (आप क्या संस्करण का उल्लेख नहीं था आप 'का उपयोग कर फिर से ...)

2

उपयोग इस (मान लेते हैं कि आपके तालिका नाम ईमेल) है:

select * from emails as a 
inner join 
(select EmailAddress, min(Id) as id from emails 
group by EmailAddress) as b 
on a.EmailAddress = b.EmailAddress 
and a.Id = b.id 

आशा है कि यह मदद ..

0

मुझे आपके डीबीएमएस के बारे में निश्चित नहीं है। तो, मैं Redshift में और मेरे अनुभव से अस्थायी तालिका बनाया है, मुझे लगता है कि इस क्वेरी लौटना चाहिए कि आप क्या देख रहे हैं:

select min(Id), distinct MailId, EmailAddress, Name 
    from yourTableName 
    group by MailId, EmailAddress, Name 

मुझे लगता है कि मैं एक GROUP BY clause उपयोग कर रहा हूँ लेकिन आप अभी भी दो पंक्तियों की ज़रूरत नहीं होगी किसी भी विशेष MailId के खिलाफ।

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

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