任何人都可以帮助解决我遇到的 SQL 问题,我需要将 n 行合并到一条记录中。个别记录可能会或可能不会填充其他人所做的字段。
基本上我有一个问题,在 SQL 中创建了重复记录。有些包含其他不包含的信息。我需要合并它们(我可以对它们进行排名),如果前一个记录中不存在该值,则更新一个字段(从排名最高的第一开始)。
例如,如果我有两条用户记录,一条填写了姓氏,另一条填写了名字。这些是重复的,需要合并到一个记录中,就像合并一样。但是,有 n 行。
它本质上是将许多记录转置为一个,其中仅当排名较低的重复记录填充了该字段并且该字段不存在于排名较高的行中时才更新字段。
这是该问题的一个非常简化的版本。如您所见,使用 SQL Fiddle 脚本创建了 6 条记录。这些记录应合并为 2 条记录并填写所有字段。
问题是,可能有 x 行。我不能使用合并语句,因为行数存在差异。
希望这有意义吗?
CREATE TABLE [dbo].[Employee]([EmployeeId] varchar(10) NULL,
[First Name] [varchar](30) NULL,
[Middle Name] [varchar](30) NOT NULL,
[Last Name] [varchar](30) NOT NULL,
[E-Mail] [varchar](80) NOT NULL)
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('BOB1','Bob','','','bob@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('BOB1','','John','','bob@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('BOB1','','','Smith','bob@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('MARK1','','Peter','','mark@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('MARK1','Mark','','','mark@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('MARK1','','','Davis','mark@hotmail.com');
select * from [Employee]
希望这是有道理的。
谢谢