2011-05-21 6 views
5

Estoy construyendo un sistema para enviar correos electrónicos y necesito ir a la tabla [Usuario] para recuperar el correo electrónico para enviar, así como un GUID (tipo de identificador único) que se utilizará para cancelar la suscripción.Grupo de servidores sql por múltiples columnas unicidad solo en una columna

Es para una solución de comercio electrónico, ya que los usuarios anónimos e iniciados pueden tener las mismas direcciones de correo electrónico, crea entradas duplicadas de correos electrónicos que deben ser distintos en la consulta.

Tengo problemas para encontrar una solución para recuperar el correo electrónico y el guid pero solo ser distinto en el correo electrónico. Aquí está mi consulta hasta ahora.

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

Respuesta

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 

o

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

Muchas gracias !!!!! Esta consulta funcionó perfectamente, he encontrado este problema antes y no he encontrado ninguna respuesta. Esto me ayudará para muchos proyectos por venir. – Brad

0

Usted podría hacer

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

agregar 'distinct' en este caso no tendrá ningún efecto en el resultado. El conjunto de resultados ya es distinto debido a 'group by'. –

Cuestiones relacionadas