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

SQL Developer中如何将同一患者的多行保险数据合并到单个单元格?

嘿,这个需求在数据处理里挺常见的,不同数据库有对应的实现方法,我给你整理了几种主流数据库的解决方案:

分数据库实现合并逻辑

MySQL/MariaDB

直接用GROUP_CONCAT函数就能搞定,这是MySQL专门用来拼接分组内字符串的工具:

SELECT PAT_ID, GROUP_CONCAT(INS SEPARATOR '; ') AS INS
FROM your_table_name
GROUP BY PAT_ID;

简单说就是按PAT_ID分组,把每组里的INS值用; 连接起来,刚好符合你要的格式。要是担心有重复的保险值,可以加个DISTINCT在INS前面,比如GROUP_CONCAT(DISTINCT INS SEPARATOR '; ')。

SQL Server

如果是2017及以后的版本,用STRING_AGG函数超方便:

SELECT PAT_ID, STRING_AGG(INS, '; ') AS INS
FROM your_table_name
GROUP BY PAT_ID;

要是用的是2016及更早的老版本,就得用STUFF搭配FOR XML PATH的组合写法了:

SELECT DISTINCT
    PAT_ID,
    STUFF(
        (SELECT '; ' + INS FROM your_table_name t2 WHERE t2.PAT_ID = t1.PAT_ID FOR XML PATH('')),
        1, 2, ''
    ) AS INS
FROM your_table_name t1;

这里FOR XML PATH('')会把同ID的保险值拼接成一串带; 开头的字符串,STUFF就是把开头多余的; 去掉。

Oracle

Oracle 11g及以后可以用LISTAGG函数,还能指定拼接顺序:

SELECT PAT_ID, LISTAGG(INS, '; ') WITHIN GROUP (ORDER BY INS) AS INS
FROM your_table_name
GROUP BY PAT_ID;

里面的ORDER BY INS是可选的,要是你不需要按保险名称排序,直接去掉就行。

小提醒

  • 记得把代码里的your_table_name换成你实际的表名哦
  • 如果INS字段可能有空值,建议加个WHERE INS IS NOT NULL过滤,避免拼接出无效的空内容
  • 部分数据库对拼接后的字符串长度有默认限制,比如MySQL的GROUP_CONCAT默认是1024字符,要是需要更长可以提前设置参数:SET GROUP_CONCAT_MAX_LEN = 1000000;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:04:06