2011-05-21 28 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