【问题标题】:Sql Server group by multiple columns uniqueness only on one columnSql Server按多列分组唯一性仅在一列上
【发布时间】:2011-08-30 07:34:57
【问题描述】:

我正在构建一个发送电子邮件的系统,我需要进入 [User] 表以检索要发送到的电子邮件,以及用于取消订阅目的的 GUID(唯一标识符类型)。

它用于电子商务解决方案,因此因为匿名用户和登录用户可以拥有相同的电子邮件地址,它会创建重复的电子邮件条目,这些条目需要在查询中区分。

我无法找到检索电子邮件和 guid 的解决方案,但仅在电子邮件上有所不同。到目前为止,这是我的查询。

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

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008 group-by


    【解决方案1】:
    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
    

    【讨论】:

    • 非常感谢!!!!!!!这个查询完美无缺,我之前遇到过这个问题,但没有找到任何答案。这将对我未来的许多项目有所帮助。
    【解决方案2】:

    你可以的

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

    【讨论】:

    • 在这种情况下添加distinct 不会对结果产生任何影响。由于group by,结果集已经不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多