You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'

说明:

  1. 第一部分DuplicatePatients完全沿用原脚本的逻辑,筛选出所有存在重复的姓名+出生日期组合,不受PID是否存在的影响。
  2. 第二部分通过JOIN关联原表,把属于这些重复组合的所有患者记录全部查出,同时带出PID和地址信息。
  3. 若地址是多字段(如街道、城市、邮编),直接添加对应字段即可,比如p.Street, p.City, p.Zip_Code。
  4. 输出文件名改为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:10:58