SQL Anywhere 9查询重复患者时如何关联PID及地址信息
SQL Anywhere 9 重复患者查询补充PID及地址的解决方案
原脚本通过姓名+出生日期组合识别重复患者,能正常提取重复记录,但直接加入PID字段会因部分记录无PID导致漏判。要保留原重复判断逻辑,同时获取对应患者的PID及地址信息,可以用以下修改后的脚本:
-- 先找出所有重复的姓名+出生日期组合 WITH DuplicatePatients AS ( SELECT Name || '_' || Other_Names || '_' || DOB AS PatientString FROM dba.patient GROUP BY PatientString HAVING COUNT(*) > 1 ) -- 关联原表获取每条重复患者的详细信息 SELECT p.Name AS Last_Name, p.Other_Names AS First_Name, p.DOB AS Date_Of_Birth, p.PID, -- 替换为实际表中PID的字段名 p.Address -- 替换为实际表中地址的字段名 FROM dba.patient p JOIN DuplicatePatients dp ON p.Name || '_' || p.Other_Names || '_' || p.DOB = dp.PatientString ORDER BY p.Name, p.Other_Names, p.DOB, p.PID; OUTPUT TO 'c:\duplicates_with_details.csv'
说明:
- 第一部分
DuplicatePatients完全沿用原脚本的逻辑,筛选出所有存在重复的姓名+出生日期组合,不受PID是否存在的影响。 - 第二部分通过JOIN关联原表,把属于这些重复组合的所有患者记录全部查出,同时带出PID和地址信息。
- 若地址是多字段(如街道、城市、邮编),直接添加对应字段即可,比如
p.Street, p.City, p.Zip_Code。 - 输出文件名改为
duplicates_with_details.csv,避免覆盖原查询结果。
如果SQL Anywhere 9不支持WITH语法,可改用子查询版本:
SELECT p.Name AS Last_Name, p.Other_Names AS First_Name, p.DOB AS Date_Of_Birth, p.PID, p.Address FROM dba.patient p JOIN ( SELECT Name || '_' || Other_Names || '_' || DOB AS PatientString FROM dba.patient GROUP BY PatientString HAVING COUNT(*) > 1 ) dp ON p.Name || '_' || p.Other_Names || '_' || p.DOB = dp.PatientString ORDER BY p.Name, p.Other_Names, p.DOB, p.PID; OUTPUT TO 'c:\duplicates_with_details.csv'
这样修改后,既不会破坏原有的重复识别逻辑,又能拿到每条重复患者的完整信息,包括无PID的记录。
内容的提问来源于stack exchange,提问作者Alex Lees
相关产品推荐
相关产品推荐

