首页 > 解决方案 > SQL Group by 但记录关系

问题描述

这是我的问题:

我有以下数据,我希望对其进行重复数据删除和一般清理,这些字段是:

RDBMS 是 Azure SQL

我想要做的是对姓名、电话号码和电子邮件进行分组,然后将 UniqueID 记录在单独的列中,例如:

NewUniqueID Name PhoneNumber Email OldIDs
1 Sam Smith 091234567 sam.smith@test.com 12,54,65,70

但是,我不确定创建 OldIDs 字段的正确术语是什么,所以我一直无法找到如何去做。

标签: sqlstringgroup-byazure-sql-databasewindow-functions

解决方案


似乎想要字符串聚合:

select 
    row_number() over(order by (select null)) newUniqueID,
    name,
    phoneNumber,
    email,
    string_agg(uniqueID, ',') oldIDs
from mytable
group by name, phoneNumber, email

这会为每个元组生成一行(name, phoneNumber, email),并连接uniqueIDcolumn 中的所有 s oldIDs。为结果集中的每一行row_number()分配一个新的。id


推荐阅读