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

如何使用SQL存储过程按班次、性别统计就诊患者并区分男女儿童

医院患者签到数据统计实现

需求说明

需要按天统计签到患者数据,规则如下:

  • 按签到时间拆分班次:12点前为早班,12点及以后为晚班
  • 按性别拆分统计当日签到的男性、女性总人数
  • 单独统计当日签到的18岁及以下男童、女童数量

优化后SQL查询代码

你原有代码的分组逻辑存在问题,GROUP BY Ch.EnteredOn会按照带时分秒的完整时间戳分组,导致同一天的签到数据被拆分为多条,修正后的代码如下:

SELECT 
    COUNT(ch.EnteredOn) AS counter, 
    CONVERT(date, ch.EnteredOn) AS sessionDay,
    SUM(CASE WHEN CAST(CONVERT(CHAR(2), ch.EnteredOn, 108) AS INT) < 12 THEN 1 ELSE 0 END) AS Morning,
    SUM(CASE WHEN CAST(CONVERT(CHAR(2), ch.EnteredOn, 108) AS INT) >= 12 THEN 1 ELSE 0 END) AS Evening,
    SUM(CASE WHEN p.Gender = 1 THEN 1 ELSE 0 END) AS Male,
    SUM(CASE WHEN p.Gender = 2 THEN 1 ELSE 0 END) AS Female,
    SUM(CASE WHEN DATEDIFF(hour, P.DOB, GETDATE()) / 8766 <= 18 
                  AND P.Gender = 1 THEN 1 ELSE 0 END) AS MChild,
    SUM(CASE WHEN DATEDIFF(hour, P.DOB, GETDATE()) / 8766 <= 18 
                  AND P.Gender = 2 THEN 1 ELSE 0 END) AS FChild
FROM 
    Patient.CheckIn ch
INNER JOIN
    Patient.Patients P ON ch.PatientId = p.PatientId
GROUP BY
    CONVERT(date, ch.EnteredOn)

字段说明

核心依赖字段共3个,取值规则如下:

  • Gender:性别字段,取值1代表男性,取值2代表女性
  • Time:对应代码中ch.EnteredOn,为患者签到时间戳
  • DOB:患者出生日期字段,用于计算年龄

统计结果字段说明:

  • counter:当日总签到患者数
  • sessionDay:统计对应的日期
  • Morning:当日早班签到人数
  • Evening:当日晚班签到人数
  • Male:当日签到男性总人数
  • Female:当日签到女性总人数
  • MChild:当日签到18岁及以下男童人数
  • FChild:当日签到18岁及以下女童人数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:00