【发布时间】:2013-11-13 09:59:45
【问题描述】:
我有一个数据库,用于记录一家小型诊所的患者信息。我们使用 MS SQL Server 2008 作为后端。患者表包含以下列:
Id int identity(1,1),
FamilyName varchar(30),
FirstName varchar (20),
DOB datetime,
AddressLine1 varchar (50),
AddressLine2 varchar (50),
State varchar (20),
Postcode varchar (4),
NextOfKin varchar (20),
Homephone varchar (20),
Mobile varchar (20)
有时,工作人员会为一名新患者登记,但并不知道该患者已经在系统中保存了记录。我们最终得到了数千条重复的记录。
我想做的是提供一份重复记录的患者列表,供工作人员在安静时间合并。如果 2 条记录具有完全相同的 FamilyName、FirstName 和 DOB,我们认为 2 条记录是重复的。我目前正在做的是使用子查询返回记录如下:
SELECT FamilyName,
FirstName,
DOB,
AddressLine1,
AddressLine2,
State,
Postcode,
NextOfKin,
HomePhone,
Mobile
FROM
Patients AS p1
WHERE Id IN
(
SELECT Max(Id)
FROM Patients AS p2,
COUNT(id) AS NumberOfDuplicate
GROUP BY
FamilyName,
FirstName,
DOB HAVING COUNT(Id) > 1
)
这会产生结果,但性能很糟糕。有没有更好的方法呢?唯一的要求是我需要显示患者表中的所有字段,因为系统用户希望在决定是否合并记录之前查看所有详细信息。
【问题讨论】:
标签: sql sql-server database sql-server-2008