我试图根据我的要求检索一些记录。根据当前表格,商店可以拥有任意数量的经理和/或收银员及其各自的电子邮件地址。现在,我正在尝试检索一组新记录,每个分支只有一个经理和/或一个收银员及其各自的电子邮件地址(没有标准可以选择特定的经理收银员)
当前表:
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,如果我删除它,我得到所有记录。
我希望,我已经提供了足够的细节。请提供一些输入来解决此问题。
谢谢
答案 0 :(得分:1)
如果您没有选择给定分支名称和角色的电子邮件地址的首选项/规则,那么您只需执行一个简单的GROUP BY
即可获得结果:
SELECT BranchName,
Role,
MIN(Email) AS Email
FROM Store
GROUP BY BranchName,
Role