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

SQL Server中如何合并多表数据填充Claims_Transmittal表?

解决方案

在SQL Server中,要把同一Claim ID对应的多行procedure_code和procedure_cost合并成单行字符串插入到Claims_Transmittal表,可根据你的SQL Server版本选以下方法:

方法1:用STRING_AGG(SQL Server 2017及以上)

这是官方推荐的简洁高效的字符串聚合方案,假设你的表结构包含基础字段,完整INSERT语句示例:

INSERT INTO Claims_Transmittal (ClaimID, ClaimNumber, PatientID, ProcedureCodes, ProcedureCosts)
SELECT 
    c.ClaimID,
    c.ClaimNumber,
    c.PatientID,
    -- 合并procedure_code,用逗号分隔,可自定义分隔符
    STRING_AGG(cd.procedure_code, ', ') WITHIN GROUP (ORDER BY cd.procedure_code) AS ProcedureCodes,
    -- 数值类型的cost要转成字符串再聚合,可按需调整格式
    STRING_AGG(CAST(cd.procedure_cost AS VARCHAR(20)), ', ') WITHIN GROUP (ORDER BY cd.procedure_code) AS ProcedureCosts
FROM Claims c
JOIN Claims_Details cd ON c.ClaimID = cd.ClaimID
GROUP BY c.ClaimID, c.ClaimNumber, c.PatientID;
  • WITHIN GROUP (ORDER BY ...) 可选,用来指定合并后内容的排序顺序
  • 如果procedure_cost是数值类型,必须先转字符串,不然会报错

方法2:用FOR XML PATH(兼容SQL Server 2016及更早版本)

要是你的SQL Server版本不支持STRING_AGG,就用传统XML拼接方法:

INSERT INTO Claims_Transmittal (ClaimID, ClaimNumber, PatientID, ProcedureCodes, ProcedureCosts)
SELECT 
    c.ClaimID,
    c.ClaimNumber,
    c.PatientID,
    -- 合并procedure_code,去掉开头多余的分隔符
    STUFF(
        (SELECT ', ' + cd2.procedure_code 
         FROM Claims_Details cd2 
         WHERE cd2.ClaimID = c.ClaimID 
         ORDER BY cd2.procedure_code
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
        1, 2, ''
    ) AS ProcedureCodes,
    -- 合并procedure_cost
    STUFF(
        (SELECT ', ' + CAST(cd2.procedure_cost AS VARCHAR(20)) 
         FROM Claims_Details cd2 
         WHERE cd2.ClaimID = c.ClaimID 
         ORDER BY cd2.procedure_code
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
        1, 2, ''
    ) AS ProcedureCosts
FROM Claims c
GROUP BY c.ClaimID, c.ClaimNumber, c.PatientID;
  • TYPE.value('.', 'NVARCHAR(MAX)') 是为了避免XML转义字符(比如&变成&)
  • STUFF 用来删掉开头多余的, ,所以从第1位开始截掉2个字符

注意事项

  • 确保Claims_Transmittal表的对应字段长度足够,建议用NVARCHAR(MAX)或VARCHAR(MAX)类型
  • 如果需要去重,可在聚合前加DISTINCT,比如STRING_AGG(DISTINCT cd.procedure_code, ', ')
  • 要是需要定期同步数据,可把INSERT改成MERGE,避免重复插入同一ClaimID的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:40:37