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

SQL如何基于Item、PartNumber两列将多行Description合并为单列

方案1:SQL Server 2017及以上版本(推荐)

使用内置STRING_AGG函数即可直接实现分组拼接,语法简洁性能更优:

SELECT
    bs.ITEMNAME AS Item,
    bom.ITEM AS PartNumber,
    STRING_AGG(ed.NOTE, ', ') AS Description
FROM 
    vwAXBOM bom
LEFT JOIN 
    S2BOMSTR bs ON bom.POSITION = bs.ITEMNUM
LEFT JOIN 
    vwExtendedDescriptionMFG ed ON bom.ITEM = ed.itemid
WHERE 
    bom.BOMITEM = @partNum 
    AND bom.POSITION LIKE 'S%'  
    AND bom.POSITION != 'S76'
GROUP BY 
    bs.ITEMNAME, bom.ITEM

方案2:SQL Server 2016及以下版本(兼容旧版本)

修正原有STUFF + FOR XML写法的逻辑问题即可:

SELECT DISTINCT
    bs.ITEMNAME AS Item,
    bom.ITEM AS PartNumber,
    STUFF((
        SELECT ', ' + ed.NOTE
        FROM vwExtendedDescriptionMFG ed 
        WHERE bom.ITEM = ed.itemid 
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS Description
FROM 
    vwAXBOM bom
LEFT JOIN 
    S2BOMSTR bs ON bom.POSITION = bs.ITEMNUM
WHERE 
    bom.BOMITEM = @partNum 
    AND bom.POSITION LIKE 'S%'  
    AND bom.POSITION != 'S76'

核心修改说明

  • 原有写法的子查询缺少FROM vwExtendedDescriptionMFG ed数据源,导致关联逻辑异常,每行仅返回单条备注
  • 拼接前补了, 作为分隔符,用STUFF删除前两位多余的逗号和空格
  • 新增TYPE和.value逻辑处理特殊字符转义问题,避免&、<等符号被错误转为HTML实体
  • 外层通过GROUP BY或者DISTINCT去重,保证相同Item、PartNumber仅返回一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:05