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

时间:2016-09-29 02:48:19

标签: sql oracle oracle11g oracle-sqldeveloper

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

当前表:

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

输出基于以下要求:分支到Role是一对一映射,而Role to branch是one-many(角色和电子邮件形成该特定分支的唯一性)。

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

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,如果我删除它,我得到所有记录。

我希望,我已经提供了足够的细节。请提供一些输入来解决此问题。

谢谢

1 个答案:

答案 0 :(得分:1)

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

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