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

SQL Server 2014消除一对多连接重复数据的实现方法

实现一对多关系的多行字段合并(SQL Server 2014)

在SQL Server 2014里,你完全不需要用CTE就能搞定这个需求——用FOR XML PATH('')的拼接方法就可以轻松把同一个Job下的多条Route合并成一行,具体的SQL语句如下:

SELECT 
    h.JobID,
    h.JobStart,
    h.Item,
    STUFF(
        (
            SELECT ' ' + CAST(d.Route AS VARCHAR(10))
            FROM tblJobDtl d
            WHERE d.JobID = h.JobID
            FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)'),
        1, 1, ''
    ) AS Route
FROM tblJobHead h
GROUP BY h.JobID, h.JobStart, h.Item;

代码细节解释:

  • FOR XML PATH('')子查询:它会把当前JobID对应的所有Route值,前面加个空格后拼接成一个连续的字符串。比如JobID=1的子查询会生成 10 20 30这样的结果。
  • STUFF函数:用来移除字符串开头多余的空格——它从第1个字符位置开始,删除1个字符(也就是那个开头的空格),最终得到10 20 30这种干净的格式。
  • GROUP BY子句:确保每个JobID只返回一行结果,对应tblJobHead里的唯一主记录,避免重复。

关于CTE的疑问:

CTE在这里并不是必需的,上面的查询已经足够简洁高效。只有当你需要先对数据做复杂的过滤、转换等预处理时,CTE才会派上用场。针对你当前的需求,直接用分组+XML拼接的方案就完全够用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:10:05