2011-05-21 15 views
5

E-posta göndermek için bir sistem yapıyorum ve gönderilecek e-postayı ve ayrıca bir GUID (benzersiz tanımlayıcı türü) almak için [Kullanıcı] tablosuna gitmem gerekiyor) abonelikten çıkmak için kullanılacak.Sql Sunucu grubu yalnızca bir sütun üzerinde birden çok sütun tekil

Bu bir e-ticaret çözümü içindir, çünkü anonim ve giriş yapmış kullanıcılar aynı e-posta adreslerine sahip olduklarından, sorguda ayrı olması gereken yinelenen e-posta girişleri oluşturur.

E-postayı ve yönlendirmeyi almak için bir çözüm bulmakta zorlanıyorum ancak yalnızca e-postada ayrı olmak. İşte benim sorgum şu ana kadar.

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

cevap

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 

veya

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

Çok teşekkür ederim yapabilirdi !!!!! Bu sorgu mükemmel çalıştı, daha önce bu probleme rastladım ve herhangi bir cevap bulamadım. Bu birçok proje için bana yardımcı olacaktır. – Brad

0

Sen

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

Bu durumda 'distinct' ekleme sonuç üzerinde herhangi bir etkisi olmayacaktır. Sonuç grubu, "grup by" nedeniyle zaten farklı. –

İlgili konular