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

SQL行转列:按医生+病例号分组实现单行展示操作记录

修正行转列SQL语句实现医生+病例号分组单行记录

原表数据(Doctors_Table)

医生Case_Number操作类型
Brian2234Injection
Brian2234Surgery
Flor2234Surgery
Flor2234Discharge
Brian1156Injection
Brian3459Surgery
Flor3459Surgery
Brian3459H-Test

需求说明

按Doctor+Case_Number分组生成单行记录,将所有Field类型转为列,对应操作存在标记X,不存在则为空,期望输出如下:

医生Case_NumberInjectionSurgeryH_TestDischarge
Brian2234XX
Flor2234XX
Brian1156X
Brian3459XX
Flor3459X

错误的SQL及问题

以下SQL返回了医生+病例号对应的多行记录,不符合需求:

SELECT
    doctor, 
    case_number,
    CASE WHEN field = 'Injection' THEN 'X' ELSE ' ' END AS INJECTION,
    CASE WHEN field = 'Surgery' THEN 'X' ELSE ' ' END AS Surgery,
    CASE WHEN field = 'H-Test' THEN 'X' ELSE ' ' END AS H-Test,
    CASE WHEN field = 'Discharge' THEN 'X' ELSE ' ' END AS Discharge
FROM
    Doctors_Table
GROUP BY
    doctor, case_number,
    CASE WHEN field = 'Injection' THEN 'X' ELSE ' ' END,
    CASE WHEN field = 'Surgery' THEN 'X' ELSE ' ' END,
    CASE WHEN field = 'H-Test' THEN 'X' ELSE ' ' END,
    CASE WHEN field = 'Discharge' THEN 'X' ELSE ' ' END

错误结果:

医生Case_NumberInjectionSurgeryH_TestDischarge
Brian2234X
Brian2234X
Flor2234X
Flor2234X
Brian1156X
Brian3459X
Brian3459X
Flor3459X

修正后的SQL

问题出在分组条件里包含了每个CASE表达式,导致同一医生+病例号下不同操作类型被分成了多行。需要用聚合函数合并同一分组内的结果,同时分组只保留doctor和case_number:

SELECT
    doctor,
    case_number,
    MAX(CASE WHEN field = 'Injection' THEN 'X' END) AS Injection,
    MAX(CASE WHEN field = 'Surgery' THEN 'X' END) AS Surgery,
    MAX(CASE WHEN field = 'H-Test' THEN 'X' END) AS H_Test,
    MAX(CASE WHEN field = 'Discharge' THEN 'X' END) AS Discharge
FROM
    Doctors_Table
GROUP BY
    doctor, case_number
ORDER BY
    case_number, doctor;

说明

  1. 使用MAX聚合函数:对于同一doctor+case_number分组,只要存在对应的操作类型,MAX会保留X,不存在则返回NULL(对应空值)。
  2. 移除分组条件中多余的CASE表达式:仅按doctor和case_number分组,确保每组只生成一行记录。
  3. 可选的ORDER BY子句:让结果按病例号和医生排序,与期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:15:40