如何按PatientNo分组添加PatientFinalStatus列并统一患者最终状态?
按患者分组设置统一最终就诊状态的SQL实现
针对你的需求,我们可以通过两种常见的SQL方案实现,以下是具体代码和逻辑说明:
方案一:窗口函数(推荐,适用于支持窗口函数的数据库)
利用窗口函数按患者分组统计死亡记录,直接为每一行生成最终状态,写法简洁且效率较高:
SELECT PatientNo., VisitNo., DischargeCode, DischargeStatus, CASE WHEN COUNT(CASE WHEN DischargeStatus = 'Died' THEN 1 END) OVER (PARTITION BY PatientNo.) > 0 THEN 'Died' ELSE 'Survived' END AS PatientFinalStatus FROM YourTableName;
逻辑说明
PARTITION BY PatientNo.:将数据按患者编号分组COUNT(CASE WHEN DischargeStatus = 'Died' THEN 1 END):统计每组内就诊状态为Died的次数- 通过CASE判断:只要该患者有过死亡就诊记录,所有行的
PatientFinalStatus设为Died;否则设为Survived
方案二:子查询关联(适用于不支持窗口函数的老版本数据库)
如果你的数据库不支持窗口函数(如MySQL 5.x),可以通过子查询先判断每个患者的死亡状态,再关联原表生成结果:
SELECT t.PatientNo., t.VisitNo., t.DischargeCode, t.DischargeStatus, CASE WHEN s.HasDied = 1 THEN 'Died' ELSE 'Survived' END AS PatientFinalStatus FROM YourTableName t JOIN ( SELECT PatientNo., CASE WHEN EXISTS (SELECT 1 FROM YourTableName WHERE PatientNo. = p.PatientNo. AND DischargeStatus = 'Died') THEN 1 ELSE 0 END AS HasDied FROM YourTableName p GROUP BY PatientNo. ) s ON t.PatientNo. = s.PatientNo.;
逻辑说明
- 子查询
s:按患者分组,通过EXISTS判断每个患者是否存在Died的就诊记录,标记为HasDied - 将子查询结果与原表关联,根据
HasDied的值为每一行设置最终状态
注意:将代码中的
YourTableName替换为你实际使用的表名
内容的提问来源于stack exchange,提问作者paru80
相关产品推荐
相关产品推荐

