2011-05-21 17 views
5

मैं ईमेल भेजने के लिए एक सिस्टम का निर्माण कर रहा हूं और मुझे ईमेल भेजने के लिए [उपयोगकर्ता] तालिका में जाने की आवश्यकता है, साथ ही एक GUID (अद्वितीय पहचानकर्ता प्रकार)) जिसका उपयोग सदस्यता समाप्त करने के उद्देश्यों के लिए किया जाएगा।एकाधिक स्तंभों द्वारा एसक्यूएल सर्वर समूह केवल एक कॉलम पर

यह एक ईकॉमर्स समाधान के लिए है, इसलिए अज्ञात और लॉग इन उपयोगकर्ताओं के पास एक ही ईमेल पते हो सकते हैं, यह ईमेल की डुप्लिकेट प्रविष्टियां बनाता है जिन्हें क्वेरी में अलग होना आवश्यक है।

मुझे ईमेल और मार्गदर्शिका पुनर्प्राप्त करने के लिए समाधान खोजने में परेशानी हो रही है लेकिन केवल ईमेल पर अलग हो। अब तक मेरी क्वेरी यहाँ है।

SELECT Email, User_GUID 
FROM [User] 
WHERE 
    IsActive = 1 AND 
    IsEmailValid = 1 AND 
    IsNotActiveBecauseUnsubscribed = 0 AND 
    Subscribed = 1 
GROUP BY Email, User_GUID 

उत्तर

8
with cte 
as 
(
    select *, row_number() over (partition by Email order by User_GUID) RowNumber 
    from [User] 
    where 
     IsActive = 1 and 
     IsEmailValid = 1 and 
     IsNotActiveBecauseUnsubscribed = 0 and 
     Subscribed = 1 
) 
select Email, User_GUID 
from cte 
where RowNumber = 1 

या

select Email, User_GUID 
from 
(
    select *, row_number() over (partition by Email order by User_GUID) RowNumber 
    from [User] 
    where 
     IsActive = 1 and 
     IsEmailValid = 1 and 
     IsNotActiveBecauseUnsubscribed = 0 and 
     Subscribed = 1 
) tt 
where RowNumber = 1 
+0

बहुत बहुत शुक्रिया कर सकता है !!!!! यह प्रश्न सही काम करता है, मैं इस समस्या से पहले आया हूं और इसका कोई जवाब नहीं मिला है। इससे मुझे कई परियोजनाओं के लिए मदद मिलेगी। – Brad

0

आप

SELECT Distinct Email, User_GUID 
FROM [User] 
WHERE IsActive = 1 AND IsEmailValid = 1 And IsNotActiveBecauseUnsubscribed = 0 AND Subscribed = 1 
GROUP BY Email, User_GUID 
+2

इस मामले में 'विशिष्ट' जोड़ने से परिणाम पर कोई प्रभाव नहीं पड़ेगा। परिणाम समूह पहले से ही 'समूह द्वारा' के कारण अलग है। –

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