SQL Server左连接保留不匹配行并新增护士接诊标识列方法
Microsoft SQL Server 两表关联查询实现方案
基础表信息
EMER表:急诊患者入院基础数据表,包含Patient(患者标识)、AdDate(入院日期)、AdNum(入院编号)、MedRec(病历号)4个字段DESCRIP表:患者护士评估记录表,包含Patient(患者标识)、MedRec(病历号)、NurseAssesment(护士评估内容)3个字段
第一阶段:保留EMER全量记录的关联查询
要保留左表(EMER)全部记录、右表无匹配时对应字段返回NULL,使用LEFT JOIN左连接实现即可,代码如下:
-- 输出结果对应需求中的表3 SELECT e.Patient, e.AdDate, e.AdNum, e.MedRec, d.NurseAssesment FROM EMER e LEFT JOIN DESCRIP d -- 优先用唯一标识病历号做关联,避免重名患者匹配错误 ON e.MedRec = d.MedRec
执行后未在DESCRIP表中存在评估记录的患者(如样例中的患者B),NurseAssesment字段会自动返回NULL,完全匹配表3的结果结构。
第二阶段:新增护士评估状态标识列
在左连接的基础上,通过CASE WHEN判断评估字段是否为空,生成二进制标识列HasSeenNurse,代码如下:
-- 输出结果对应需求中的表4 SELECT e.Patient, e.AdDate, e.AdNum, e.MedRec, d.NurseAssesment, CASE WHEN d.NurseAssesment IS NULL THEN 0 ELSE 1 END AS HasSeenNurse FROM EMER e LEFT JOIN DESCRIP d ON e.MedRec = d.MedRec
注意:如果业务要求必须同时匹配患者标识和病历号才判定为同一人,只需要把左连接的关联条件修改为
ON e.Patient = d.Patient AND e.MedRec = d.MedRec即可,其余逻辑无需调整。
内容的提问来源于stack exchange,提问作者KapSht
相关产品推荐
相关产品推荐

