2011-05-21 63 views
5

我建立一个系统来发送电子邮件只有唯一性,我需要进入[用户]表中检索电子邮件发送给,以及一个GUID(唯一标识符类型)将用于取消订阅的目的。SQL Server组的一列

这是一个电子商务解决方案,是因为匿名登录的用户可以有相同的电子邮件地址,它会创建一个需要在查询不同的电子邮件的重复条目。

我无法找到一个解决方案来检索电子邮件和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 2011-05-21 17:48:13

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

加入'distinct'在这种情况下,不会对结果产生任何影响。由于“group by”,结果集已经不同。 – 2011-05-21 18:19:57