Sql 将一个表连接到没有特定ID的表本身

Sql 将一个表连接到没有特定ID的表本身,sql,Sql,将一个表连接到没有特定ID的表本身 我有一个没有ID列的客户记录表,客户可能会多次出现在表中,并填充了各种列。我已经设法建立了一个列INIT_姓氏,这是完全流行的,但不是唯一的客户。如何合并行以匹配具有相同INIT_姓氏并共享另一个公共数据元素的客户。例如,我想从下表中返回3个客户,前3行是同一个人 e、 g 输入: INIT_SURNAME|EMAIL|PHONE|OTHERID J*SOAP|js@x.com|4321| J*SOAP|js@x.com|| J*SOAP||4321|4 J*

将一个表连接到没有特定ID的表本身

我有一个没有ID列的客户记录表,客户可能会多次出现在表中,并填充了各种列。我已经设法建立了一个列INIT_姓氏,这是完全流行的,但不是唯一的客户。如何合并行以匹配具有相同INIT_姓氏并共享另一个公共数据元素的客户。例如,我想从下表中返回3个客户,前3行是同一个人

e、 g

输入:

INIT_SURNAME|EMAIL|PHONE|OTHERID
J*SOAP|js@x.com|4321|
J*SOAP|js@x.com||
J*SOAP||4321|4
J*SOAP|otherjoe@y.com||2
J*DOE||12345|3
输出:

INIT_SURNAME|EMAIL|PHONE|OTHERID
J*SOAP|js@x.com|4321|4
J*SOAP|otherjoe@y.com||2
J*DOE||12345|3

可以这样做吗?

您可以单独合并每一列

T-Sql中的示例代码:

declare @foo table ( 
    name varchar(30), 
    email varchar(30), 
    phone varchar(30), 
    id varchar(30)
)
insert into @foo values 
('J*SOAP','js@x.com','4321',NULL),
('J*SOAP','js@x.com',NULL,NULL),
('J*SOAP',NULL,'4321','4'),
('J*SOAP','otherjoe@y.com',NULL,'2'),
('J*DOE',NULL,'12345','3')

;with 
merge_by_email as (
    select name, email, MAX(phone) as phone, MAX(id) as id 
    from @foo 
    group by name, email
),
merge_by_phone as (
    select name, max(email) as email, phone, MAX(id) as id 
    from merge_by_email 
    group by name, phone
),
merge_by_id as (
    select name, max(email) as email, MAX(phone) as phone, id 
    from merge_by_phone 
    group by name, id
)
select * from merge_by_id

如果其他列中的一列匹配,但另一列不匹配,您希望发生什么?例如,init_姓氏和电子邮件匹配,但手机不同?这是一场比赛吗?哪部电话应该归还?