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
我试图根据我的要求检索一些记录。根据当前 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