【问题标题】:Grouping other fields by common email按普通电子邮件对其他字段进行分组
【发布时间】:2019-12-05 19:48:41
【问题描述】:

如果有人可以提供任何帮助,我将不胜感激。我尝试关注其他几个帖子 (GROUP BY to combine/concat a column),但是当我这样做时,它结合了所有内容。

我在 SQL 中有一个包含联系人数据的表。数据库中的一些联系人具有相同的电子邮件地址,特别是 admin@、accounts@ 等。我们还有每个联系人的联系人首选项列表:紧急联系人、帐户、WHS 等。我正在尝试选择结果表格,但每个电子邮件地址只有一行。

我的数据如下所示:

但是,我希望它将具有相同电子邮件地址的行分组在一起(我不关心名称)。我还希望它查看联系首选项字段,如果即使其中一个连接字段有一个是,显示一个 Y,否则显示一个 N - 见下面的例子

正如我所提到的,恐怕我所有的测试都不成功,所以如果你能提供任何帮助,我将不胜感激。

【问题讨论】:

  • 预期结果删除数据,例如:在示例数据中,您有BusinessA Admin Admin Account,然后是Samantha Gray Receptionist,并且都有管理员电子邮件地址,您删除数据的逻辑是什么?共享管理员电子邮件地址的 Samantha Gray 和后续记录?此外,您应该尝试在帖子中写入查询。
  • 我们正在使用 Exchange 创建一个简单的 CRM,但是 Exchange 需要一个唯一的电子邮件地址。如果我们只提取第一封电子邮件,我们将无法捕获所需的所有电子邮件分组,因此我们会尝试在导入 Exchange 之前加入这些分组。
  • 我尝试过关注:stackoverflow.com/questions/15154644/…stackoverflow.com/questions/451415/… 以及 Stack Overflow 和其他页面上的各种其他内容。大多数似乎引用了多个表,但我所有的数据都在一个表中,所以转换起来有点困难。

标签: sql sql-server group-by concatenation


【解决方案1】:

您可以使用以下内容:

;WITH selected as (
select min(ContactID) as ContactID, Mail, max(EmergencyContact) as EmergencyContact, 
max(AccountsCon) as AccountsCon, max(WHSContact) as WHSContact
from t
GROUP BY Mail
)
select t.ContactID, t.BusinessID, t.BusinessName, t. FirstName, t.LastName, t.Position, t.Mail, s.EmergencyContact, s.AccountsCon, s.WHSContact
from selected as s
inner join t as t ON t.ContactID = s.ContactID

通过这种方式,您可以从每封电子邮件中找到的第一条记录以及使用 max 获得的最后 3 列中获取 contactid、businessid、businessname、firstname、lastname 和 position(利用 Y 大于 N,所以如果有至少有一个 Y 它会得到 Y)。

【讨论】:

  • 谢谢CTE6!有了这个,我能够获得所需的数据。非常感谢您的帮助!
【解决方案2】:

我认为你可以只使用聚合:

select businessid, businessname, max(firstname),
       max(lastname), max(position),
       email,
       max(emergencycontact),
       max(accountscor),
       max(whcontact)
from t
group by businessid, businessname, email;

【讨论】:

  • max 可以用于比较字母吗?在这种情况下,“y”与“n”?只是问,因为我不知道你可以这样使用它。
  • @RyanWilson 。 . .是的,max() 适用于字符,通常使用字母顺序。
  • 感谢您告知我这一点,:)
猜你喜欢
  • 2023-03-29
  • 2020-06-14
  • 2018-07-20
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
相关资源
最近更新 更多