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

SQL如何查询主表全量数据并将关联子表多行结果合并为单列展示

解法说明

当前环境为SQL Server,根据版本不同可以选择以下两种实现方案:

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

直接使用内置的STRING_AGG聚合函数实现字符串拼接,语法简洁性能最优:

SELECT 
  m.t_pdno,
  m.t_mitm,
  STRING_AGG(b.t_opno, ',') AS Options
FROM main m
LEFT JOIN branch b ON m.t_mitm = b.t_mitm
GROUP BY m.t_pdno, m.t_mitm
  • 逻辑说明:用LEFT JOIN保留main表全部行,按main表的唯一键分组后,把同一个t_mitm对应的所有t_opno用逗号拼接,无匹配数据时Options列自动返回空值,完全符合预期输出。

方案2:SQL Server 2016及更低版本兼容方案

低版本没有STRING_AGG函数,可以用FOR XML PATH方式实现拼接:

SELECT 
  m.t_pdno,
  m.t_mitm,
  STUFF((
    SELECT ',' + CONVERT(VARCHAR(10), b.t_opno)
    FROM branch b 
    WHERE b.t_mitm = m.t_mitm
    FOR XML PATH(''), TYPE
  ).value('.', 'VARCHAR(MAX)'), 1, 1, '') AS Options
FROM main m
  • 逻辑说明:通过子查询拼接同一t_mitm下的所有t_opno,再用STUFF去掉开头多余的逗号,同样可以得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:09:05