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

如何在SQL中透视指定列并同时重命名列(患者数据场景)

实现SQL数据透视:将多记录患者数据转为宽表

这里提供两种符合需求的实现方案,对应你提到的MAX函数和PIVOT语法方向:

方法一:条件聚合(逻辑直观,推荐固定列场景)

通过分组+条件判断实现列转换,灵活性高:

SELECT 
    PTID,
    clmid,
    clmfrom,
    MAX(CASE WHEN CriteriaID = '41' THEN Code END) AS SysCode,
    MAX(CASE WHEN CriteriaID = '42' THEN Code END) AS DiaCode
FROM #df
GROUP BY PTID, clmid, clmfrom
ORDER BY PTID;

逻辑说明

  • 按PTID、clmid、clmfrom分组,确保同一患者同一次理赔的记录合并为一行
  • 用CASE匹配CriteriaID提取对应Code,无匹配时自动返回NULL
  • MAX用于聚合:每组内同一CriteriaID仅对应一个Code,MAX可精准提取该值,同时忽略NULL

方法二:使用PIVOT语法

如果习惯SQL原生透视语法,可通过PIVOT实现,需注意列名重命名:

SELECT 
    PTID,
    clmid,
    clmfrom,
    [41] AS SysCode,
    [42] AS DiaCode
FROM #df
PIVOT (
    MAX(Code)
    FOR CriteriaID IN ([41], [42])
) AS PivotTable
ORDER BY PTID;

逻辑说明

  • PIVOT子句中,MAX(Code)指定聚合字段,FOR CriteriaID IN ([41], [42])定义要透视的列值
  • 透视后生成的列名为[41]和[42],通过别名直接重命名为SysCode和DiaCode
  • 依赖MAX聚合确保每组仅返回一个有效Code值

两种方法均可生成你需要的#finaldf结构数据,测试结果完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:40:03