SQL 查询以根据角色和电子邮件字段检索唯一记录

SQL query to retrieve unique record based on role and email fields

我试图根据我的要求检索一些记录。根据当前 table,商店可以有任意数量的经理 and/or 收银员以及他们各自的电子邮件地址。现在,我正在尝试检索一组新记录,其中每个分支机构只有一名经理 and/or 一名收银员及其各自的电子邮件地址(没有选择特定经理收银员的标准)

当前 table:

BranchName      Role        Email
-------------------------------------------------
CA              Cashier     Cashier1@gmail.com
CA              Cashier     Cashier2@gmail.com
NY              Manager     Manager1@gmail.com
NY              Manager     Manager2@gmail.com
MASS            Manager     Manager@gmail.com
MASS            Manager     Massm@gmail.com 

预期输出:

BranchName      Role        Email
------------------------------------------------
CA              Cashier     Cashier1@gmail.com
NY              Manager     Manager1@gmail.com
MASS            Manager     massm@gmail.com

输出基于这样的要求,即分支到角色是一对一的映射,而角色到分支是一对多的(角色和电子邮件构成该特定分支的唯一性)。

我已尝试使用以下查询,但我能够看到单个分支的重复角色。

select 
    BranchName, Email, Role
from 
    (select 
         BranchName, Email, Role,
         ROW_NUMBER() OVER (PARTITION BY Role ORDER BY Email) AS "C" 
     from 
         Store
     where 
         Role IN ('Manager', 'General manager', 'Cashier')
    )
where 
    C = 1;

在我上面的查询中,当按角色分区时,它只显示具有单个分支的单个记录,而不是所有分支的单个角色。可能是因为条件 C=1,如果我删除它,我将获得所有记录。

希望我已经提供了足够的细节。请提供一些意见来解决这个问题。

谢谢

如果您没有 preference/rule 用于选择给定分支名称和角色的电子邮件地址,那么您只需执行简单的 GROUP BY 即可获得结果:

SELECT BranchName,
       Role,
       MIN(Email) AS Email
FROM Store
GROUP BY BranchName,
         Role