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

如何按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.;

逻辑说明

  1. 子查询s:按患者分组,通过EXISTS判断每个患者是否存在Died的就诊记录,标记为HasDied
  2. 将子查询结果与原表关联,根据HasDied的值为每一行设置最终状态

注意:将代码中的YourTableName替换为你实际使用的表名

内容的提问来源于stack exchange,提问作者paru80

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:10:31